【Java 小白菜入門筆記 1.3】流程控制、數組和輸入輸出

實驗來源:https://www.shiyanlou.com/courses/1230

流程控制
if else ,switch, do-while, while

if(condition){
    todo
}
else if(other condition){
    todo
}
else{
    todo
}
switch(value){
    case v1:
        todo
        break;
    case v2:
        todo
        break;
    default:
        todo
}
while(condition){
    todo
}

do{
    todo
}while(condition)

for循環,和C++的格式一樣,舉例;(計算1到1000的所有偶數之和)

public class SumOfEven{
    public static void main(String[] args){
        int sum = 0;
        for (int i = 1; i <= 1000; i++){
            if (0 == i % 2){
                sum += i;
            }
        }
        System.out.println("sum of 1-1000 : " + sum);
    }
}

輸出結果:

sum of 1-1000 : 250500

對輸入字符去除空格實驗:

import java.util.Scanner;

public class StringUtil{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String a = input.nextLine();
        String prt = new String("");
        for(int i = 0; i < a.length(); i++){
            if(' ' != a.charAt(i)){
                prt = prt + a.charAt(i);
            }
        }
        System.out.println(prt);
    }
}

輸入輸出結果:

shi ya n  lou
shiyanlou

注意:

  1. for循環的i一定要先聲明類型 int i = 0;
  2. String中取元素(char)應該用charAt(index)方法,而不是Python中的直接當數組來取值a[index]這種。
  3. String的拼接直接用加號即可。

字符串比較實驗:

import java.util.Scanner;

public class ContrastString{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String str1 = input.nextLine();
        String str2 = input.nextLine();
        boolean is_same = true;
        for(int i = 0; i < str1.length(); i++){
            if(str1.charAt(i) != str2.charAt(i)){
                is_same = false;
                break;
            }
        }
        if(is_same == true){
            System.out.println("相同");
        }
        else{
            System.out.println("不同");
        }
    }
}

輸入輸出:

abc3
abc3
相同

注意:

  1. 用Scanner生成一個從System.in獲取數據的對象,然後用它的nextLine方法讀入一行,存到String中。
  2. Java裏的boolean類型的取值是true和false(小寫),與python不同。
  3. 仍然是注意在使用變量前先聲明類型。

打印星期幾實驗:

import java.util.Scanner;

public class PrintWeek{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int i = input.nextInt();
        String WeekDay = new String("");
        switch(i){
            case 1:
                WeekDay = "一";
                break;
            case 2:
                WeekDay = "二";
                break;
            case 3:
                WeekDay = "三";
                break;
            case 4:
                WeekDay = "四";
                break;
            case 5:
                WeekDay = "五";
                break;
            case 6:
                WeekDay = "六";
                break;
            case 7:
                WeekDay = "天";
                break;
            default:
                WeekDay = " ";
        }
        System.out.println("今天是星期" + WeekDay);
        return;
    }
}

輸入輸出測試:

shiyanlou:project/ $ java PrintWeek                       [17:25:57]
1
今天是星期一
shiyanlou:project/ $ java PrintWeek                       [17:26:01]
7
今天是星期天
shiyanlou:project/ $ java PrintWeek                       [17:26:08]
8
今天是星期 

數組

數組的定義方式

數據類型[ ] 數組名; 
數據類型 數組名[ ];
數組名 = new  數據類型 [ 數組長度 ];

一些例子:

int [] int_array;
int int_array[];
int_array = new int[10];
String [] name;
int [] ages = {12, 18, 9, 33, 45, 60};

Java中對數組的遍歷有一個foreach 的寫法,即:

for(int age:ages){
	todo sth.
}

有點類似於Python中 for i in arr 的語句。

注意:Java中的數組是用大括號引起來的,和Python中的中括號不同。Python的大括號是用來初始化集合(set)類型的。

二維數組的定義方式:

int [][] score = new int[2][3];

int [][] score;
score = new int[3][4];

int [][] score = {{1,2},{3,4}};

一個栗子,生成一個String爲元素的數組,並且依次打印元素值。

public class ArrayTest{
    public static void main(String[] args){
        String [][] name = {{"zhao", "qian", "sun"}, 
                            {"li", "zhou", "wu"}};
        for (int i = 0; i < name.length; i++){
            for (int j = 0; j < name[0].length; j++){
                System.out.println(name[i][j]);
            }
        }
        return;
    }
}

數組應用實驗,求分數平均值

public class AverageScore{
    public static void main(String args[]){
        int [] score_list = {61,57,95,85,75,65,44,66,90,32};
        int sum = 0;
        for(int i = 0; i < score_list.length; i++){
            sum = sum + score_list[i];
        }
        double avg = sum / score_list.length;
        System.out.println("Average Score is " + avg);
        return;
    }
}

仍要注意類型的聲明,以及return和main的返回值的對應關係。
對於數組,可以用中括號取元素,而String則需要用其自帶的方法,即charAt。
對於array,用length(不帶括號)獲取數組長度。而String中的帶括號。
(實際上說明array的length是一個屬性,而String類的length是它的一個方法)

實驗任務:從console每行輸入一個字符串,保存到數組,直到遇到end,將所有除了end以爲的之前的字符按順序輸出。

import java.util.Scanner;

public class InputTest{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String [] data = new String [100];
        int cnt = 0;
        while(cnt < 100){
            String in_str = input.nextLine();
            if(! in_str.equals("end")){
                data[cnt] = in_str;
                cnt += 1;
            }
            else{
                break;
            }
        }
        for(int j = 0; j < cnt; j++){
            System.out.println(data[j]);
        }
    }
}

這裏要注意的一點是:字符串String類型比較不用 == ,如果用了,返回的不是兩個String 是否相同,而是兩個String是否指向了同一個對象。應該用String類的自帶方法 equals 來比較。

上面的寫法不太優雅,因爲用了while裏面的判斷。實際上可以直接用Scanner的 hasNext 方法來實現對於退出字符的判斷。如下所示:

import java.util.Scanner;

public class InputTest{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String [] data = new String [100];
        int cnt = 0;
        while(!input.hasNext("end")){
            data[cnt] = input.nextLine();
            cnt += 1;
        }
        for(int j = 0; j < cnt; j++){
            System.out.println(data[j]);
        }
    }
}

實驗:給定數組輸出最大最小值。

public class MaxAndMin{
    public static void main(String args[]){
        int [] data = {313, 89, 123, 323, 313, 15, 90, 56, 39};
        int Max = data[0];
        int Min = data[0];
        for(int num:data){
            if(num > Max){
                Max = num;
            }
            if(num < Min){
                Min = num;
            }
        }
        System.out.println("Mininum is " + Min);
        System.out.println("Maximum is " + Max);
    }
}

注意:for-loop用 foreach 的形式時,也需要對冒號前的元素變量指定類型。
比如 for(int num:data)

2020年6月27日00:50:53
北京 永豐

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章