1.输入输出

在前面的代码中,我们总是使用System.out.println()来向屏幕输出一些内容。println是print line的缩写,表示输出并换行。因此,如果输出后不想换行,可以用System.out.print()格式化输出:
如果要把数据显示成我们期望的格式,就需要使用格式化输出的功能。格式化输出使用System.out.printf(),通过使用占位符%?,printf()可以把后面的参数格式化成指定格式:

public class Main{
    public static void main(String[] args){
        double d = 3.1415927;
        System.out.printf("%.2f",d);  
        System.out.printf("%.4f",d);  
    }
}

占位符

说明

%d

格式化输出整数

%x

格式化输出十六进制整数

%f

格式化输出浮点数

%e

格式化输出科学计数法表示的浮点数

%s

格式化字符串

输入: 直接看案例

输入类型:
方法     描述
nextBoolean()     从用户输入中读取1个 boolean 值
nextByte()      从用户输入中读取1个 byte 值
nextDouble()     从用户输入中读取1个 double 值
nextFloat()     从用户输入中读取1个 float 值
nextInt()     从用户输入中读取1个 int 值
nextLine()     从用户输入中读取1个 String 值
nextLong()     从用户输入中读取1个 long 值
nextShort()     从用户输入中读取1个 short 值

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // 创建Scanner对象
        System.out.print("Input your name: "); // 打印提示
        String name = scanner.nextLine(); // 读取一行输入并获取字符串
        System.out.print("Input your age: "); // 打印提示
        int age = scanner.nextInt(); // 读取一行输入并获取整数
        System.out.printf("Hi, %s, you are %d\n", name, age); // 格式化输出
    }
}

首先,我们通过import语句导入java.util.Scanner,import是导入某个类的语句,必须放到Java源代码的开头

然后,创建Scanner对象并传入System.in。System.out代表标准输出流,而System.in代表标准输入流。直接使用System.in读取用户输入虽然是可以的,但需要更复杂的代码,而通过Scanner就可以简化后续的代码。

有了Scanner对象后,要读取用户输入的字符串,使用scanner.nextLine();要读取用户输入的整数,使用scanner.nextInt()。Scanner会自动转换数据类型,因此不必手动转换。

2.if判断

if语句的基本语法是:

if (条件) {
    // 条件一满足时执行
}
else if(条件) {
    // 条件二满足时执行
}
else{
    // 条件不满足时执行
}

拓:浮点数相等判断。浮点数在计算机中常常无法精确表示,并且计算可能出现误差,因此,判断浮点数相等用==判断不靠谱

public class Main {
    public static void main(String[] args) {
        double x = 1 - 9.0 / 10;
        // 利用Math的绝对值之差
        if (Math.abs(x - 0.1) < 0.00001) {
            System.out.println("x is 0.1");
        } else {
            System.out.println("x is NOT 0.1");
        }
    }
}

3.switch语句

switch (option) {
    case 3:
        ...
        break;
    case 2:
        ...
        break;
    case 1:
        ...
        break;
    default:
        ...
        break;
}

4.while循环

while循环在每次循环开始前,首先判断条件是否成立。如果计算结果为true,就把循环体内的语句执行一遍,如果计算结果为false,那就直接跳到while循环的末尾,继续往下执行。

public class Main {
    public static void main(String[] args) {
        int sum = 0; // 累加的和,初始化为0
        int n = 1;
        while (n <= 100) { // 循环条件是n <= 100
            sum = sum + n; // 把n累加到sum中
            n ++; // n自身加1
        }
        System.out.println(sum); // 5050
    }
}

while循环是先判断循环条件,再循环,因此,有可能一次循环都不做。

5.do…while循环

在Java中,while循环是先判断循环条件,再执行循环。而另一种do while循环则是先执行循环,再判断条件,条件满足时继续循环,条件不满足时退出。它的用法是:

do {
    执行循环语句
} while (条件表达式);

可见,do while循环会至少循环一次。

6.for循环

public class Main {
    public static void main(String[] args) {
        int[] ns = { 1, 4, 9, 16, 25 };
        int sum = 0;
        for (int i=0; i<ns.length; i++) {
            System.out.println("i = " + i + ", ns[i] = " + ns[i]);
            sum = sum + ns[i];
        }
        System.out.println("sum = " + sum);
    }
}
/*
i = 0, ns[i] = 1
i = 1, ns[i] = 4
i = 2, ns[i] = 9
i = 3, ns[i] = 16
i = 4, ns[i] = 25
sum = 55
*/
for each循环

本质上为增强for循环:用来遍历集合与数组

格式:
for(集合/数组的数据类型 变量名:集合名/数组名){
    执行语句
}

7.break与continue

break:会跳出整个循环,也就是整个循环都不会执行了
continue:提前结束本次循环,直接继续执行下次循环

8.二维数组

public class Main {
    public static void main(String[] args) {
        int[][] ns = {
            { 1, 2, 3, 4 },
            { 5, 6, 7, 8 },
            { 9, 10, 11, 12 }
        };
        System.out.println(ns.length); // 3
    }
}

因为ns包含3个数组,因此,ns.length为3.
访问二维数组的某个元素需要使用array[row][col],例如:

System.out.println(ns[1][2]); // 7