Scanner对象
-
程序和人的交互 ,java.util.Scanner我们可以通过Scanner类来获取用户的输入
-
基本语法:
Scanner s = new Scanner(System.in);
-
通过Scanner类的next()—(是否有下一个)与nextLine()—(是否有下一行)方法获取输入的字符串,在读取前前一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据
- next():
- 一定要读取到有效字符后才可以结束输入
- 对输入有效字符前遇到的空白,next()方法会自动省略
- 只有输入有效字符后才将其后面的输入的空白作为分隔符或者结束符
- next()不能得到带有空格的字符串
- nextLine():
- 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
- 可以获得空白
- next():
-
案例:
//创建一个扫描对象,用于接收键盘数据 Scanner scanner = new Scanner(System.in); //1 System.out.println("请输入字符:"); //判断用户有没有输入字符串 /* System.out.println("next()Scanner练习"); if (scanner.hasNext()){ String s = scanner.next(); //程序会等待用户输入完毕 System.out.println(s); } System.out.println("nextLine()Scanner练习"); if (scanner.hasNextLine()){ String s = scanner.nextLine(); //程序会等待用户输入完毕 System.out.println(s); } System.out.println("不需要判断用户有没有输入字符串"); String s = scanner.nextLine(); System.out.println(s); */ //2 数据型 int i = 0; float f = 0.0f; System.out.println("请输入数:"); if (scanner.hasNextInt()){ i = scanner.nextInt(); System.out.println("输入整数为:"+i); }else if(scanner.hasNextFloat()){ f = scanner.nextFloat(); System.out.println("输入小数为:"+f); }else{ System.out.println("不是数"); } //关闭Scanner,节省资源,凡是属于IO源的类如果不关闭会一直占用资源 scanner.close();
System.out.println("===========Scanner练习============="); //通过多个数字,求其总和与平均值,每输入一个数字用回车确认, // 通过输入非数字来结束输入并输出结果 Scanner scanner1 = new Scanner(System.in); boolean flag =true; double sum = 0.0; int num = 0; System.out.println("请输入一个数(任意字符结束)"); while (scanner.hasNextDouble()){ double number = scanner.nextDouble(); num++; sum += number; System.out.println(num+"个数,sum="+sum); } System.out.println("输入数的总和:"+sum); System.out.println("输入数的平均值:"+(sum/num)); scanner1.close();
顺序结构
- JAVA的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行(他是任何一个算法都离不开的一种基本算法结构)
选择结构
-
if
-
if单选结构:判断一个东西是否可行
if(布尔表达式){
//布尔结果为true执行的语句
}
-
if双选结构:需要两个判断: if-else
if(布尔表达式){
//布尔结果为true执行的语句
}else{
//布尔结果为false执行的语句
}
-
if多选结构:需要多个判断: if-else-if
if(布尔表达式1){
//布尔1结果为true执行的语句
}else if(布尔表达式2){
//布尔2结果为true执行的语句
}else{
//以上布尔表达式结果都为false执行的语句
}
-
嵌套的if语句:可以在另一个if或者else-if语句中使用if或者else-if语句
if(布尔表达式1){
//布尔1结果为true执行的语句
if(布尔表达式2){
//布尔2结果为true执行的语句
}
}
-
-
switch多选择结构
-
switch case语句判断一个变量与一系列值中某个值是否相等,每个值称成为一个分支
switch(表达式){
case value1:
//语句
break; //-可选
case value2:
//语句
break; //-可选
default: //-可选
//语句
}
- switch语句中变量类型可以是:byte、short、int、char
- 从Java SE7开始,switch支持String类型
- 同时case标签必须为字符串常量或字面量
- switch匹配一个具体的值
-
案例
System.out.println("===========switch选择============="); //字符的本质还是数字,反编译 java--class(字节码文件)--反编译(IDEA) String name = "狗子"; switch (name){ case "gouzi": System.out.println("bu是我呀~"); break; case "狗": System.out.println("bu是我~"); break; default: System.out.println("是我呀~"); }
-
循环结构
-
while循环:是最基本的循环
while(布尔表达式){
//循环内容
}
-
只要布尔表达式为ture,循环就会一直执行下去,造成无线循环(死循环),会影响程序卡斯崩溃。少部分情况需要循环一直执行,比如服务器的请求响应监听等
-
大多数情况需要循环停止下来,则需要一个让表达式失效的方式来结束循环
-
案例:
//输出1-100的和 int i = 1; //初始化 double sum = 0.0; while (i<=100){ //条件判断 sum += i; i++; //迭代 } System.out.println(sum);
-
-
do…while循环:如果不满足条件,则不能进入循环
do{
//代码语句
}while(布尔表达式);
-
while和do-while区别
- while先判断后执行,do-while先执行后判断
- Do…while总是保证循环体被至少执行一次
-
案例:
//输出1-100的和 int i = 0; double sum = 0.0; do{ i++; sum += i ; }while (i<100); System.out.println(sum);
-
-
基础 for循环
-
Java提供了另一种语句—for循环,使一些循环结构变得简单
for(初始化 ; 条件判断 ; 迭代){
//代码语句
}
-
for循环执行次数是在执行前就确定的
-
for循环语句是支持迭代的一种通用结构,是最有效,最灵活的循环结构
-
最先执行初始化步骤,可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。条件判断,迭代也可以是空语句
-
案例:
System.out.println("输出1-100的奇数和偶数"); int i = 0; double sum1 = 0.0; //奇数和 double sum2 = 0.0; //偶数和 for(;i<=100;i++){ if (i%2 != 0){ //找奇数 sum1 += i; }else{ sum2 += i; } } System.out.println("奇数:"+sum1); System.out.println("偶数:"+sum2); System.out.println("输出1-1000能被5整除的数,并且每行输出3个"); int a = 1; while(a<=1000){ if (a%5 == 0){ System.out.print(a +"\t"); } if (a % (5*3) == 0 ){ //3个5 System.out.println(); } a++; } // System.out.println(); System.out.println("九九乘法表"); int b =1; int c ; for (;b<10;b++){ for (c=1;c<=b;c++){ System.out.print(c+"×"+b+"="+b*c+"\t"); } System.out.println(); }
-
-
增强型for循环(之后学习会使用)
for(声明语句 : 表达式){
//代码句子
}
-
Java5中引入了一种主要用于数组或集合的增强型for循环
-
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循坏语句块,其值与此时数组元素的值相等
-
表达式:表达式是要访问的数组名,或者是返回值为数组的方法
-
案例:
System.out.println("===========增强for循环============="); int[] numbers = {10,20,30}; //定义一个数组 //遍历数组元素 for(int i : numbers){ //把numbers数组每一项遍历赋值给i System.out.println(i); }
-
-
break和continue、goto
-
break在任何循环语句的主体部分,均可用break控制循环的流程。
break用于强行退出循环,不执行循环中剩余的语句。(break也在switch语句中使用)
-
continue语句在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行语句,接着进行下一次是否执行循环的判断(“终止一次”)
🍃关于goto关键字
- goto关键字很早就在程序设计语言中出现,尽管goto仍是Java的一个保留字,但并未在语言中得到正式的使用。Java没有goto,然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子——带标签的break和continue
- "标签"是指后面跟一个冒号的标识符。例如:label:
- 对Java来说唯一用到标签的地方是在循环语句之前,而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,他们就会中断到存在标签的地方
-
案例
System.out.println("===========101-150的质数============="); int i =101; for (;i<=150;i++){ boolean fag = false; for (int j =2;j<i;j++){ if (i%j == 0){ fag=true; break; } } if (fag){ continue; } System.out.println(i); } // int num = 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); // } //101 //103 //107 //109 //113 //127 //131 //137 //139 //149
例题
System.out.println("===========打印三角形=============");
//方法1
// for (int i = 0;i<5;i++){
// for (int k =1;k<=(4-i);k++){
// System.out.printf(" ");
// }
// for (int j = 0;j<(2*i+1);j++){
// System.out.print("*");
// }
// System.out.println();
// }
//方法2
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();
}