1.用户交互Scanner
Scanner对象:Java.util.Scanner是Java5的新特性,我们可以通过Scanner类来获取用户的输入。
基本语法:
Scanner s=new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。
//next() //创建一个扫描器对象,用于接收键盘数据 Scanner sc=new Scanner(System.in); System.out.println("使用next方法接收:"); //判断用户有没有输入字符串 if(sc.hasNext()){ //使用next方式接收 String str=sc.next(); System.out.println("输出的内容为:" + str); } //凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉 sc.close();
-
next():
1、一定要读取到有效字符后才可以结束输入。
2、对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
4、next()不能得到带空格的字符串。
//nextLine() //从键盘接收数据 Scanner scanner = new Scanner(System.in); System.out.println("请输入nextLine的内容:"); //判断是否还有输入 if(scanner.hasNextLine()){ String s = scanner.nextLine(); System.out.println("输出的内容是:" + s); } //关闭流 scanner.close();
-
nextLine():
1、以Enter为结束符,nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白。
Scanner有很多方法,例如nextInt(),next(),nextDouble(),nextLine(),nextBigDecimal()等,可以自行打开Scanner类查看。
练习:输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果。
//我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果; Scanner scanner = new Scanner(System.in); //先初始化 个数,总和,平均数 int quantity=0; double sum=0; double average=0; System.out.println("请输入你要计算的数字:"); //用循环计算每次的结果 while (scanner.hasNextDouble()){ double num=scanner.nextDouble(); sum=sum+num; quantity=quantity+1; average=sum/quantity; System.out.println("第"+quantity+"个数字为:" +num ); System.out.println("总和为:" + sum); System.out.println("平均数为:" + average); } System.out.println("总共输入了" + quantity + "个数字,总和为:" + sum+",平均数为"+average); System.out.println("程序结束"); //关闭流 scanner.close();
2.顺序结构
Java的基本结构就是顺序结构,除非特别指明,否则就是按照顺序从上到下执行。
顺序结构就是最简单的算法结构,任何一个算法都离不开这种基本算法结构。
public static void main(String[] args) { System.out.println("111"); System.out.println("333"); System.out.println("444"); System.out.println("666"); System.out.println("222"); }
3.选择结构
1.if单选择结构
条件为true时,才会执行大括号中的内容,条件为false则不执行。
语法:
if (条件表达式) {
//条件为true时执行
}
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入内容:"); String s = scanner.nextLine(); //equals:判断字符串是否相等 if(s.equals("Hello")){ System.out.println(s); } System.out.println("结束"); //关闭流 scanner.close(); }
2.if双选择结构
语法:
if(条件表达式){
//条件为true时执行
}else{
//条件为false时执行
}
//考试成绩大于60分就是及格,小于60分就是不及格 Scanner scanner = new Scanner(System.in); System.out.println("请输入成绩:"); double score=scanner.nextDouble(); if(score>60){ System.out.println("及格"); } else { System.out.println("不及格"); } scanner.close();
3.if多选择结构
语法:
if(条件表达式1){
//条件1为true时执行
} else if(条件2){
//条件2为true时执行
}else if(条件3){
//条件3为true时执行
}else{
//以上条件为false时执行
}
//考试成绩大于60分就是及格,小于60分就是不及格 Scanner scanner = new Scanner(System.in); System.out.println("请输入成绩:"); double score=scanner.nextDouble(); if(score==100){ System.out.println("满分"); } else if (score>=90 && score <100) { System.out.println("优秀"); } else if (score>=75 && score <90) { System.out.println("良好"); } else if (score>=60 && score <75) { System.out.println("中等"); } else if (score>=0 && score <60) { System.out.println("不及格"); } else { System.out.println("成绩不合法"); } scanner.close();
4.嵌套if结构
语法:
if(条件表达式1){
//条件1为true时执行
if(条件表达式2){
//条件2为true时执行
}
}
5.switch多选择结构
switch case语句判断一个变量与一系列值中某个值是否相等,每个值成为一个分支。
语法:
switch("表达式"){ case "value1": //语句 break;//可选 case "value2": //语句 break;//可选 .... default://可选 //语句 }
-
switch语句中的变量类型可以是:
-
byte、short、int或者char
-
从Jdk 7开始switch支持字符串String类型了
-
同时case标签必须为字符串常量或者字面量
-
如果case分支后没有用break,就会造成case穿透;会一直输出下方分支的语句,遇到break才会停止。
//case 穿透 //switch 匹配一个具体的值 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;//可选 case 'e': System.out.println("挂科"); break;//可选 default://可选 System.out.println("未知等级"); }
//字符的本质还是数字,case 的value值是字符串时,本质存的是对应的hashCode值。
反编译 Java---class(字节码)文件----反编译(IDEA)
4.循环结构
1.while循环
只要表达式为true,循环就会一直执行。
语法:
while(布尔表达式){
//循环体
控制变量
}
//计算1+2+3....+100=? int i=0; int sum=0; while(i<100){ i++; sum=sum+i; } System.out.println(sum);
我们大多数情况会让循环停止下来,所以需要一个控制变量让表达式失效去结束循环。
少数情况需要循环一直执行,比如服务器的请求响应监听等。
循环条件一直为true时会造成死循环,会影响程序性能或者造成程序卡死崩溃!要尽量避免死循环!!
2.do...while循环
do...while循环无论条件是否满足,至少会执行一次循环。
while循环先判断后执行,do...while循环先执行后判断!
语法:
do{
//循环体
控制变量
}while(布尔表达式);
//计算1+2+3....+100=? int i=0; int sum=0; do{ i++; sum=sum+i; }while(i<100); System.out.println(sum);
3.for循环
for循环是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
for循环的执行次数是在执行前就确定的。
语法:
for(初始化;循环条件;循环后操作){
//循环体
}
//初始化 条件判断 迭代 for (int i=1;i<=100;i++){ System.out.println(i); }
注意:
最先执行初始化步骤,可以声明一种类型,但可以初始化一个或者多个循环控制变量,也可以是空语句。
然后检测循环条件,如果为true循环体就执行;如果为false循环就终止,开始执行循环体后面的语句。
执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减);再次检测循环条件,执行循环体。
练习:分别计算0到100之间的奇数和偶数的和
//分别计算0到100之间的奇数和偶数的和 int oddSum=0; int evenSum=0; for(int i=0;i<=100;i++){ if(i%2==0){//偶数,能被2整除 evenSum+=i; }else{//奇数 oddSum+=i; } } System.out.println("奇数之和为:"+oddSum); System.out.println("偶数之和为:"+evenSum);
三种死循环写法:
//while死循环 while(true){ //循环体; } //do...while死循环 do{ //循环体; }while(true); //for死循环 for(;;){ //循环体; }
4.增强for循环(java 5中引入的)
语法:
for(类型 变量名 :数组/集合名){
//循环体
}
int[] nums={10,20,30,49,50};//定义了一个数组 //遍历数组的元素 for(int x:nums){ System.out.println(x); }
5.break&continue
-
break
break在任何循环语句的主体部分 都可以用break控制循环的流程。
break用于强行退出循环,不执行循环中剩余的语句。(break也在switch语句中使用)
int i=0; while(i<100){ i++; System.out.println(i); if(i==30){ break;//终止循环 } } System.out.println(66);
-
continue
continue语句用在循环语句中,用于终止某次循环,即跳过循环体中未执行的语句,接着进行下一次循环。
int i=0; while(i<100){ i++; if(i%6==0){ System.out.println("6的倍数不输出"); continue;//跳出当前循环,继续下一次循环 } System.out.println(i); }
-
goto关键字
goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的保留字,但是并未在语言中得到正式使用;Java没有goto。然后在break和continue这两个关键字上,可以看出一些goto的影子——就像带标签的break和continue。
”标签“是指后面跟一个冒号的标识符,例如:label:
对于Java来说唯一用到标签的地方是在循环语句之前。在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue通常只能中断当前循环,但若随同标签使用,他们就会中断到存在标签的地方。
//打印101-150之前所有的质数 不建议使用!!!!!!!!! //质数是指在大于1的自然数中,除了1和它本身之外没有其他因数的自然数。 int count=0; outer:for (int i = 101; i <150 ; i++) { for (int j = 2; j <i/2 ; j++) { if(i%j==0){ continue outer; } } System.out.print(i+"\t"); }
6.练习
输出一个三角形
//打印一个三角形 for (int i = 1; i < 8; i++) {//外层循环控制行 //内层循环控制列 for (int j = 1; j <=8-i; j++) {//填充左边空白格 System.out.print(" "); } for (int k = 1; k <=i ; k++) {//三角形左半边 System.out.print("a"); } for (int n = 1; n <i; n++) {//三角形右半边 System.out.print("a"); } //换行 System.out.println(""); }