廖雪峰Java教程学习笔记(二)——流程控制
(一)输入和输出
输出
System.out.println();//输出并换行 System.out.print();//输出后不换行
格式化输出
格式化输出使用System.out.printf(),通过使用占位符%?,printf()可以把后面的参数格式化成指定格式
占位符
%d 格式化输出整数
%x 格式化输出十六进制整数
%f 格式化输出浮点数
%e 格式化输出科学计数法表示的浮点数
%s 格式化字符串
由于%表示占位符,因此,连续两个%%表示一个%字符本身
//把一个整数格式化成十六进制,并用0补足8位 int n = 12345000; System.out.printf("hex=%08x",n);
输入
首先创建Scanner对象并传入System.in,代表标准输入流,同样的,System.out代表标准输出流。
读取字符串使用scanner.nextLine();读取整数使用scanner.nextInt();等等。
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();//读取一行输入并获取整数
例如,输入上次考试成绩(int)和本次考试成绩(int),然后输出成绩提高的百分比,保留两位小数位
import java.util.Scanner; public class Test{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入上次考试成绩:"); int grade1 = scanner.nextInt(); System.out.print("请输入本次考试成绩:"); int grade2 = scanner.nextInt(); float percent = (float)(grade2 - grade1)/ grade1*100; System.out.printf("%.2f%%\n",percent); } }
(二)if判断
if语句的基本语法是
if(条件){ //条件满足时执行,可以是多条语句 } else{ //条件判断为false时,执行语句 }
else不是必须的,也可以使用多个if...else if串联。
使用多个if时,要特别注意判断顺序,同时还要注意边界条件。
判断引用类型相等
- ==表示“引用是否相等”,是否指向同一个对象
- equals()判断引用类型的变量内容是否相等
例如
if (s1.equals(s2)){ System.out.println("s1 equals s2"); }
但如果变量s1为null,会报NullPointerException,为了避免此类错误,可以利用短路运算符&&
if (s1.equals(s2)){ System.out.println("s1 equals s2"); }
练习:计算体制指数BMI,并打印结果
import java.util.Scanner; public class Test{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("身高:"); float height = scanner.nextFloat(); System.out.print("体重:"); float weight = scanner.nextFloat(); float BMI = weight/(height*height); if(BMI > 32) { System.out.print("非常肥胖"); } else if(BMI > 28 && BMI <= 32) { System.out.print("肥胖"); } else if(BMI > 25 && BMI <= 28) { System.out.print("过重"); } else if(BMI > 18.5 && BMI <= 25) { System.out.print("正常"); } else { System.out.print("过轻"); } } }
(三)switch多重选择
- switch语句根据switch表达式计算的结果,跳转到匹配的case结果,然后继续执行后续语句,直到遇到break结束执行;
- switch的计算结果必须是整型、字符串或枚举类型;
- 不要漏写break和default。
练习:石头剪刀布游戏
import java.util.Scanner; public class Test{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入选项:"); String option = scanner.nextLine(); switch(option) { case "剪刀和石头": System.out.print("剪刀和石头,石头赢"); break; case "剪刀和布": System.out.print("剪刀和布,剪刀赢"); break; case "石头和布": System.out.print("石头和布,布赢"); break; default: System.out.print("错误"); break; } } }
(四)while循环
while循环的基本用法是先判断循环条件再执行循环,条件满足时继续循环,条件不满足时退出循环。
while(条件表达式){ 循环语句 }
编写循环时要注意循环条件,并避免死循环。while可能一次循环都不执行。
(五)do while循环
do while循环的基本用法是,先执行循环,再判断条件,条件满足时继续循环,条件不满足时推出循环。
do{ 执行循环语句 }while(条件表达式);
do while至少会执行一次循环。
(六)for循环
for循环的用法是
for(初始条件;循环检测条件;循环后更新计数器){ //执行语句 }
for循环还可以缺少初始化语句,循环条件和每次循环更新语句。
for each循环可以用来遍历数组,例如
public class Main { public static void main(String[] args) { int[] ns = { 1, 4, 9, 16, 25 }; for (int n : ns) { System.out.println(n); } } }
(七)break和continue
break
语句可以跳出当前循环;break
语句通常配合if
,在满足条件时提前结束整个循环;break
语句总是跳出最近的一层循环;continue
语句可以提前结束本次循环;continue
语句通常配合if
,在满足条件时提前结束本次循环。