【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
北京 永丰

posted @ 2020-06-27 00:51  毛利小九郎  阅读(196)  评论(0编辑  收藏  举报