Java基础 Part 2
用户交互
Java.utli.Scanner是java5的新特征,可以通过Scanner类获取用户的输入
Scanner s = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。
next():
-
一定要读取到有效字符后才可以结束输入。
-
对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
-
只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
-
next()不能得到带有空格的字符串。
nextLine():
-
以enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
-
可以获得空白。
public class Demo01 { public static void main(String[] args) { //创建一个扫描器对象,用于接受键盘数据 Scanner sc = new Scanner(System.in); if (sc.hasNextLine()) { //使用next方式接收 String str = sc.nextLine(); System.out.println("输出的内容为:" + str); } //凡是使用IO流的类如果不关掉就会一直占用资源,养成良好习惯及时关闭 sc.close(); } }
题目:输入多个数字求总和与平均数,每输入一个数字回车确认,通过输入非数字来结束输入并输出执行结果。
public class Demo01 { public static void main(String[] args) { //输入多个数字求总和与平均数,每输入一个数字回车确认,通过输入非数字来结束输入并输出执行结果。 Scanner sc = new Scanner(System.in); //和 double sum = 0; //计算输入了多少个数字 int m = 0; //通过循环判断是否还有输入,并在里面对每一次进行求和统计 while(sc.hasNextDouble()){ double x = sc.nextDouble(); m++; sum=sum + x; } System.out.println(m+"个数的和为:"+sum); System.out.println(m+"个数的平均数为:"+(sum/m)); sc.close(); } }
顺序结构
语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
选择结构
if单选择结构
if(布尔表达式){
//为true则执行
}
if双选择结构
if(布尔表达式){
//为true执行
}else{
//为false执行
}
public class Demo02 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int s = scanner.nextInt(); if(s>60){ System.out.println("及格"); }else{ System.out.println("不及格"); } scanner.close(); } }
if多选择结构
if(布尔表达式1){
//1为true执行
}else if(布尔表达式2){
//2为true执行
}else if(布尔表达式3){
//3为true执行
}else{
//以上都为false执行
}
public class Demo02 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //一旦其中一个else if语句检测为true,其他的else if以及else语句都将跳过执行 int s = scanner.nextInt(); if(s==100){ System.out.println("满分"); }else if(s<100&&s>=80){ System.out.println("优秀"); }else if(s<80&&s>=60){ System.out.println("及格"); }else if(s<60&&s>=0){ System.out.println("不及格"); }else { System.out.println("输入不合法"); } scanner.close(); } }
switch多选择结构
switch (expression) {
case value :
//语句
break; //可选,case穿透,如果没有break则后面的值都会输出
case value :
//语句
break; //可选
default://可选
//语句
}
public class Demo02 { public static void main(String[] args) { //case穿透,如果没有break则后面的值都会输出 char grade = 'C'; switch (grade) { case 'A': System.out.println("优秀"); break;//可选 case 'B': System.out.println("良好"); break;//可选 case 'C': System.out.println("及格"); break;//可选 case 'D': System.out.println("不及格"); break;//可选 default: System.out.println("未知等级"); } } }
循环结构
while循环
while(布尔表达式){ }
布尔表达式为true则会一直执行下去,应避免死循环,需要一个结束循环的方式。
do...while循环
do...while至少会执行一次,先执行后判断
do{ //代码 }while(布尔表达式);
for循环
for(初始化;布尔表达式;更新){ }
练习1:计算0-100之间所有奇数与偶数的和
public class Demo02 { public static void main(String[] args) { //计算0-100之间所有奇数与偶数的和 int oddsum = 0; int evensum = 0; for (int i = 1; i <= 100; i++) { if (i%2!=0){ oddsum+=i; }else{ evensum+=i; } } System.out.println("奇数的和"+oddsum); System.out.println("偶数的和"+evensum); } }
练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出三个
public class Demo02 { public static void main(String[] args) { for (int i = 0; i <= 1000; i++) { if(i%5==0){ System.out.print(i+"\t"); } if(i%(5*3)==0){ System.out.println(); } } } }
练习3:打印九九乘法表
public class Demo02 { public static void main(String[] args) { for (int j = 1; j <= 9; j++) { for (int i = 1; i <= j; i++) { System.out.print(i + "*" + j + "=" + (j * i)+"\t"); } System.out.println(); } } }
增强for循环
主要用于数组或集合
for(声明语句:表达式){ }
break、continue
break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句接着进行下一次是否执行循环的判定。
练习
打印三角形
public class Demo02 { public static void main(String[] args) { //打印三角形 5行 for (int i = 1; i <= 5; i++) { for (int j = 5; j >= i; j--) { System.out.print(" "); } for (int j = 1; j <= i; j++) { System.out.print("*"); } for (int j = 1; j < i; j++) { System.out.print("*"); } System.out.println(); } } }