用户交互Scanner
-
java.util.Scanner 是java5的新特征 ,我们可以通过Scanner类来获取用户的输入
-
基本语法: Scanner s=new Scanner(System.in);
-
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext与hasNextLine()判断是否还有输入的数据
-
next()不能得到带有空格的字符串
package scanner; import java.util.Scanner; public class Demo01 { public static void main(String[] args) { //创建一个扫描机器对象,用于接收键盘数据 Scanner scanner = new Scanner(System.in); System.out.println("使用next方式接收:"); //判断用户有没有输入字符串 if (scanner.hasNext()){ //使用next方法接收 String str=scanner.next(); System.out.println("输出的内容为:"+str); } //关闭scanner I/O 流 scanner.close(); } }
-
nextLine可以获得空白的字符串
package scanner; import java.util.Scanner; public class Demo02 { public static void main(String[] args) { //从键盘接收数据 Scanner scanner = new Scanner(System.in); System.out.println("使用nextLine方式接收:"); //判断是否还有输入 if (scanner.hasNextLine()){ String str= scanner.nextLine(); System.out.println("输出的内容为:"+str); } scanner.close(); } }
package scanner; import java.util.Scanner; public class Demo02 { public static void main(String[] args) { //从键盘接收数据 Scanner scanner = new Scanner(System.in); System.out.println("使用nextLine方式接收:"); String str= scanner.nextLine(); System.out.println("输出的内容为:"+str); scanner.close(); } }
scanner进阶版
package scanner; import java.util.Scanner; public class Demo03 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // int i=0; float f=0.0f; System.out.println("请输入整数:"); if (scanner.hasNextInt()){ i=scanner.nextInt();; System.out.println("整数数据:"+i); }else { System.out.println("输入的不是整数数据"); } System.out.println("请输入小数:"); if (scanner.hasNextFloat()){ f=scanner.nextFloat(); System.out.println("小数数据:"+f); }else{ System.out.println("输入的不是小数数据"); } scanner.close(); } }
scanner实际应用
package scanner; import java.util.Scanner; public class Demo04 { public static void main(String[] args) { //我们可以输入多个数字,并求其总和与平均数,没输入一个数字回车确认,通过输入非数字来结束程序。 Scanner scanner = new Scanner(System.in); //定义变量和 double sum=0; //定义输入的次数 int m=0; System.out.println("请输入数据:"); //通过循环判断是否还有输入,并在里面对每一次进行求和统计 while (scanner.hasNextDouble()){ double x = scanner.nextDouble(); m=m+1; sum=sum+x; System.out.println("你输入了第"+m+"个数据,当前的总和为:"+sum); System.out.println("你输入了第"+m+"个数据,当前的平均值为:"+(sum/m)); } System.out.println(m+"个数的和为"+sum); System.out.println(m+"个数的平均值为"+(sum/m)); scanner.close(); } }
顺序结构
-
java的基本结构就是顺序结构,任何一个算法都离不开的一个基本算法结构
package struct; public class Demo01 { public static void main(String[] args) { System.out.println("1"); System.out.println("2"); System.out.println("3"); System.out.println("4"); System.out.println("5"); } }
选择结构
-
if单选泽结构
语法: if(布尔表达式){
//如果布尔表达式为true将执行的语句
}
package struct; import java.util.Scanner; public class Demo02 { 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("end"); scanner.close(); } }
-
if双选择结构
语法:
if(布尔表达式){
//如果布尔表达式为true将执行的语句
}else{
//如果布尔表达式为false将执行的语句
}
package struct; import java.util.Scanner; public class Demo03 { public static void main(String[] args) { //考试分数>60是及格,<60是不及格。 Scanner scanner=new Scanner(System.in); System.out.println("请输入分数:"); int score=scanner.nextInt(); if(score>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{
//如果布尔表达式为true将执行的语句
}
package struct; import java.util.Scanner; public class Demo04 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println("请输入成绩:"); int score=scanner.nextInt(); if(score==100){ System.out.println("满分"); }else if(score<100&&score>=90){ System.out.println("优秀"); }else if(score<90&&score>=70){ System.out.println("良好"); }else if(score<70&&score>=60){ System.out.println("合格"); }else if(score<60&&score>=0){ System.out.println("不及格"); }else { System.out.println("成绩不合法"); } scanner.close(); } }
-
嵌套的if结构(二分查找法)
语法: if(布尔表达式1){
//如果布尔表达式1为true将执行的语句
if(布尔表达式2){
//如果布尔表达式2为true将执行的语句
}
-
switch多选择结构
-
实现方式就是switch case 与语句
-
switch case 语句判断一个变量与一系列值中某个值是否相等,每一个值称为一个分支
-
语法: switch(expression){
case value:
//语句
break;//可选
case value:
//语句
break;//可选
//你可以有任意数量的case语句
default://可选
//语句
}
-
switch语句中的变量类型可以是:
-
byte、short、int、char、String
-
case标签必须为字符串常量或字面量
-
package scanner; public class Demo6 { public static void main(String[] args) { //字符的本质还是数字 //反编译 java--class(字节码文件)--反编译(ieda) String nmae="we"; switch (nmae){ case"we": System.out.println("we"); break; case"bn": System.out.println("bn"); break; default: System.out.println("不符合要求"); } } }
-
循环结构
-
while循环
-
最基本的循环:
while(布尔表达式){
//循环内容
}
-
条件不满足,不能进入循环,先判断后执行
-
只要布尔表达式TRUE,循环就会一直执行下去
-
大多数情况会让循环停止下来,需要让一个表达式失效的方式来结束循环
-
思考:计算1+2+3+4+...+100=?
-
package struct; public class WhileDemo02 { public static void main(String[] args) { int i=0; int sum=0; while (i<=100){ sum=sum+i; i++; } System.out.println(sum); } }
package struct; public class WhileDemo01 { public static void main(String[] args) { //输出1~100 int i=0; //i<100让循环终止的方式 while(i<100){ i++; System.out.print(i+"\t"); } } }
-
do...while循环
-
语法: do{
//代码语句
}while(布尔表达式);
-
do...while循环至少会执行一次,先执行后判断。
package struct; public class WhileDemo03 { public static void main(String[] args) { int i=0; int sum=0; do { sum=sum+i; i++; }while (i<=100); System.out.println(sum); } }
-
区别:
package struct; public class WhileDemo04 { public static void main(String[] args) { int a=0; while (a<0){ System.out.println(a); a++; } System.out.println("==================="); do { System.out.println(a); a++; }while (a<0); } }
-
for循环
-
支持迭代的一种通用结构,最有效、最灵活的循环结构
-
快捷键:数字.for
-
for循环执行的次数是在执行之前就确定的,语法: for(初始化;布尔表达式;更新){
//代码语句
}
package struct; public class ForDemo01 { public static void main(String[] args) { int a=1;//初始化条件 while (a<=100) {//条件判断 System.out.println(a);//循环体 a+= 2;//迭代 } System.out.println("while循环结束"); //初始化条件;//条件判断;//循环体 for (int i=1;i<=100;i++){ System.out.println(i); } System.out.println("for循环结束"); } }
-
-
练习1:计算0-100之间奇数和偶数的和
package struct; public class ForDemo02 { public static void main(String[] args) { // int oddSum=0; int evenSum=0; for (int i = 0; i <=100; i++) { if(i%2!=0){//奇数 oddSum+=i; }else {//偶数 evenSum+=i; } } System.out.println("奇数的和:"+oddSum); System.out.println("偶数的和:"+evenSum); } }
-
练习2:用while或者for循环输出1-100之间能被5整除的数,并且每行输出3个
package struct; public class ForDemo03 { public static void main(String[] args) { for (int i = 1; i <=100; i++) { if (i%5==0){ //\t相当于tab键 System.out.print(i+"\t"); } //每三个数换行 if (i%(5*3)==0){ //换行 //System.out.println(); System.out.print("\n"); } } //printlin 输出完会换行 //print 输出完不会换行 } }
-
练习3:打印九九乘法表
package struct; public class ForDemo04 { 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+"="+(i*j)+"\t"); } System.out.println(); } System.out.println("==========="); int m=1; int n=1; while(m<=9){ n=1; while (n<=m){ System.out.print(n+"*"+m+"="+(n*m)+"\t"); n++; } System.out.println(); m++; } } }
-
主要用于数组增强型for循环
-
语法: for(声明语句:表达式)
{
//代码句子
}
-
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配,其作用域在限定语句块,其值与此时的数组元素的值相等
-
表达式:表达式是要访问的数组名,或者是返回值为数组的方法
package struct; public class ForDemo05 { public static void main(String[] args) { int[] numbers={1,2,3,4}; for (int i=0;i<4;i++){ System.out.println(numbers[i]); } System.out.println("=============================="); //遍历数组元素 for(int x:numbers){ System.out.println(x); } } }
-
break&continue
-
break在任何循环语句的主体部分,均可用break控制循环流程
-
break用于强制退出循环,不执行循环中剩余的语句(break语句也在switch语句中使用)
-
continue语句在循环语句中,用于终止某次循环过程,即跳过循环体中尚未执行得到语句,接着进行下一次是否执行循环的判断
package struct; public class BreakDemo01 { public static void main(String[] args) { int i=0; while (i<100){ i++; System.out.println(i); if (i==10){ break; } } } }
continue:
package struct; public class ContinueDemo01 { public static void main(String[] args) { int i=0; while (i<100){ i++; if (i%10==0){ System.out.println(); continue; } System.out.print(i); } } }
扩展 goto关键字(没有得到正式的使用)
package struct; public class Goto { public static void main(String[] args) { //打印101-150之间所有质数 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.println(i+" "); } } }
流程控制练习
打印三角形:
package struct; import java.util.Scanner; public class TestDemo01 { public static void main(String[] args) { //打印三角形 Scanner scanner = new Scanner(System.in); System.out.println("请输入要打印的层数:"); int n=scanner.nextInt(); for (int i = 1; i <= n; i++) { for (int j = n; 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(); } } }
空心三角形:
package struct; import java.util.Scanner; public class TestDemo02 { public static void main(String[] args) { //空心三角形 Scanner scanner = new Scanner(System.in); System.out.println("请输入要打印的层数:"); int n=scanner.nextInt(); for (int i = 1; i <=n; i++) {//一共要打印的层数 if(i==n){ for (int m=1;m<=2*i-1;m++){ System.out.print("*"); } }else { for (int j=1;j<=n-i;j++){//每层要打印的第一批空格数 System.out.print(" "); } System.out.print("*"); for (int k=1;k<=2*i-3;k++){//每层要打印的第二批空格数 System.out.print(" "); } if (i!=1){ System.out.print("*"); } System.out.println(); } } } }