Java 流程控制
-
用户交互canner
-
顺序结构
-
循环结构
-
选择结构
-
break&continue
-
练习
用户交互canner
canner对象
获取用户输入
基本语法:
创建scanner语句 实现程序与人的交互
Scanner s=new Scanner(System.in);
通过scanner 类的next()与nextLine()方法获取输入的字符串。
hasNext()与hasNextLine方法判断是否还有输入的数据
next()
package com.shifei.next;
import java.util.Scanner;
//next()
public class Domo00 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
//输出内容
System.out.println("使用Next方式接收:");
//使用hasNext判断用户有没有输入字符串
if (scanner.hasNext())
{
//程序会等待用户输入完毕
String str = scanner.next();
//输出内容
System.out.println("输出内容:" + str);
}
//凡是属于io流的类,如果不关闭会一直占用资源
scanner.close();
}
}
-
在读取到有效字符后才可结束输入
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OHbPMGwB-1614818091035)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214174827571.png)]
-
在有效字符前输入的字符next()方法会将其关闭
-
有效字符后的空格将会视为
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Le7MQNy-1614818091036)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214174902581.png)]
-
next()方法识别不到空格后的字符
nextLine()
package com.shifei.next;
import java.util.Scanner;
// 使用nextLine方法
public class Domo01 {
public static void main(String[] args) {
// 创建一个扫描器,用来接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方式接收:");
//判断用户是否有输入语句串
if (scanner.hasNext())
{
//程序会等待用户输入完毕
String str=scanner.nextLine();
//输出内容
System.out.println("输出内容为:"+str);
}
//凡是属于io流的类,如果不关闭会一直占用资源
scanner.close();
}
}
-
可以获取空格
-
以回车作为结束符,可以获取输入回车前的所有字符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wjVYk1FP-1614818091039)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214180630434.png)]
去掉判断语句
package com.shifei.next;
import java.util.Scanner;
//去掉判断语句 使用nextLine方法
public class Domo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:" );
//程序会等待用户输入完毕
String str=scanner.nextLine();
//输出内容
System.out.println("输出内容为:"+str);
//凡是属于io流的类,如果不关闭会一直占用资源
scanner.close();
}
}
应用实例:
先使用hasNextXxx()方法进行验证,再使用nextXxx()来读取。
-
Scanner进阶 整数与小数
package com.shifei.next; import java.util.Scanner; //应用实例:整数与小数 public class Domo03 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int i; float f; //输入整数 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(); } }
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z2jYPIhD-1614818091040)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214200621533.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0jiqzqjK-1614818091043)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214200636769.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0r2zXSi3-1614818091047)(C:\Users\Administrator\Desktop\360截图20210214204800821.jpg)]
整数是指正整数、负整数和零,如负6、0、32等。浮点数是指带有有限位小数的有理数,如负10、8、0.00、25、01等。整数与浮点数的区别:整数既可以是整数,也可以是浮点数,例如255是整数,而255、0则是浮点数;整数运算得到的结果是一个整数,并且计算结果中的小数部分将被忽略。浮点运算得到的结果是一个浮点数,计算结果中的小数部分将保留下来。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CDUvtFjV-1614818091049)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214212051184.png)]
- 输入多个数字,并求和和平均值,每输入一个数字并回车,通过非数字结束,并输出内容
package scanner;
import jdk.nashorn.internal.ir.WhileNode;
import java.util.Scanner;
public class Domo4 {
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 v = scanner.nextDouble();
//每输入一个数字,个数m+1
m=m+1;
sum = sum + v;
System.out.println("您输入了第" + m + "个数字,当前sum=" + sum );
}
System.out.println(m + "总和为:" + sum );
System.out.println(m + "平均值为:" + ( sum / m ) );
scanner.close();
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EJrE8JZD-1614818091051)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215043156342.png)]
注:while语句后不能加分号
顺序结构
选择结构
- 单选择结构
- 双选择结构
- 多选择结构
- 嵌套结构
- switch多选择结构
单选择结构
if(表达式)----True-----语句—结果
if (表达式) ----False--------------结果
package com.shifei.struck;
import java.util.Scanner;
//判断字符是否相同
public class Domo00 {
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();
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k4pt6wku-1614818091052)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214232411422.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PHEPiVMU-1614818091054)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210214232502756.png)]
双选择结构
if(表达式)------true-----true语句----结果
if (表达式) -----False----False语句-----结果
package com.shifei.struck;
import java.util.Scanner;
//分数是否及格
public class Domo01 {
public static void main(String[] args) {
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();
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NRS5tKU4-1614818091055)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215045526977.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RpSOpLwH-1614818091057)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215045548050.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mHDlqZQO-1614818091059)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215045602218.png)]
多选择结构
if(表达式)—true–执行语句1----else if(表达式2)—else
- if语句至多有1 个 else 语句,eLse语句在所有的else if 语句之后。
- if语句可以有若干个else if语句,它们必须在 else语句之前。
- 一旦其中一个else if语句检测为 true,其他的 else if 以及else语句都将跳过执行
package com.shifei.struck;
import java.util.Scanner;
public class Domo02 {
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("A");}
else if(score<90&&score>=80){
System.out.println("B");}
else if(score<80&&score>=70){
System.out.println("C");}
else if(score<70&&score>=60){
System.out.println("D");}
else if (score<60&&score>=0)
{ System.out.println("不及格"); }
else{
System.out.println("不合法");
}
scanner.close();
}
}
switch多选择结构
switch语句中的变量类型可以是:
-
byte、short、int或者char
-
switch支持字符串String类型了
-
同时case标签必须为字符串常量或字面量。
switch(表达式){case value:
break;
case value:
break;
default:}
switch选择结构(字符)
package com.shifei.struck;
//switch选择结构(字符) //case 穿透性 switch 匹配一个具体值
public class Domo03 {
public static void main(String[] args) {
char grade='s';//改变字符
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("再接再厉");
case 'f':
System.out.println("挂科");
default:
System.out.println("未知等级");
}
}
}
错误易犯:
-
case 语句末尾是:
-
字符’a’ 字符串"a"
-
break用来终止
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZXisb3dj-1614818091061)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215154405617.png)]
-
没有break语句程序会一直运行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zBjTJUDK-1614818091062)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215154814381.png)]
-
default:语句
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8uSXfImQ-1614818091064)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215155048865.png)]
switch选择结构(字符串)
package com.shifei.struck;
//switch选择结构(字符串)JDK 7新特性 表达式可以是字符串
public class Domo04 {
public static void main(String[] args) {
String name="是非";
switch (name){
case "hds":
System.out.println("是否");
break;
case "hd":
System.out.println("sjh");
break;
case "ds":
System.out.println("sds");
default:
System.out.println("非法字符");
}
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jebSkt59-1614818091065)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215160335706.png)]
反编译:java----class(字节码文件)—反编译(IDEA)
软件设置—project–project 。。。out路径中
循环结构
- while
- do…while
- for
- 增强for循环
while
while(表达式){循环内容}
表达式–true—一直运行
死循环:当while(true)
案例1:输出1~100
package com.shifei.struck.forDomo;
//输出1~100
public class Domo00 {
public static void main(String[] args) {
int i=0;
while (i<100){
i++;
System.out.println(i);//1~100
}
}
}
案例2:输出1+2+3…+100=?
package com.shifei.struck.forDomo;
//输出1++2+3....100=?;
public class Domo01 {
public static void main(String[] args) {
int i=1;
int sum=0;
while (i<=100){
sum=sum+i;
i++;
}
System.out.println(sum);//5050
}
}
package com.shifei.struck.forDomo;
public class Domo3 {
public static void main(String[] args) {
int i=0;
int sum=0;
while (i<101){
sum=sum+i;
i++;
}
System.out.println(sum);//5050
}
}
do while
案例1:输出1+2+。。。+100=?
package com.shifei.struck.forDomo;
//do..while
public class Domo03 {
public static void main(String[] args) {
int i = 0;
int sum = 0;
do {
sum = sum + i;
i++;
}
while (i < 101); {
System.out.println(sum);//5050
}
}
}
package com.shifei.struck.forDomo;
public class Domo04 {
public static void main(String[] args) {
int a = 0;
while (a < 0){///while 语句后不加;
System.out.println(a);
a++;
}
System.out.println("------------------------------");
do {
System.out.println(a);
a++;
}
while (a<0);//do....while语句后加;
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-86hnnHBv-1614818091067)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215205939265.png)]
do while 和while区别
- while先判断后执行 do while相反
- do,.while保证被执行一次
For循环
-
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
-
for循环执行的次数是在执行前就确定的。
语法格式如下:
for(初始化;布尔表达式;更新){}
package com.shifei.struck.forDomo;
//for while 循环比较
public class Domo05 {
public static void main(String[] args) {
//初始化条件
int a = 1;
//条件判断
while (a <= 100) {
//循环体
System.out.println(a);
//迭代
a += 2;
}
System.out.println("while循环结束");//100以内奇数
//初始化 循环体 迭代
for (int i = 0; i < 100; i++) {
System.out.println(i);
}
System.out.println("for循环结束");//0~100
}
}
练习1:计算0到100之间的奇数和偶数的和
package com.shifei.struck.forDomo;
//练习1:计算0到100之间的奇数和偶数的和
public class Domo06
{
public static void main(String[] args)
{
int sum = 0;
int sum1 = 0;//偶数和:sum 奇数和:sum1
for (int i = 0; i < 100; i++) {
if (i % 2 != 0) {//判断是否是偶数
sum += i;
} else {//否则就是奇数
sum1 += i;
}
}
System.out.println("0~100偶数之和为" + sum);
System.out.println("0~100奇数之和为" + sum1);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Spi0eTMv-1614818091106)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215215412302.png)]
练习2: 用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个练习
package com.shifei.struck.forDomo;
//练习2: 用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个练习
public class Domo07 {
public static void main(String[] args) {
for (int i = 0; i < 1000;i++ ) {
if (i%5==0) {
System.out.print(i+"\t");}
if (i%15==0){
System.out.println("\n");
}
//print输出完不会换行
//println输出完就会换行
}
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cEVrjiR9-1614818091109)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215221811741.png)]
练习3: 打印九九乘法表
package com.shifei.struck.forDomo;
//练习3: 打印九九乘法表
public class Domo08
{
public static void main(String[] args)
{
for (int i = 1; i <= 9; i++)
/*先打印第一列行当i=1时i1=1
第2行:i=2时i1=1、2;
以此类推
*/
{
for (int i1 = 1; i1 <=i; i1++)
{
System.out.print(i1+"*"+i + "=" +(i*i1)+"\t");
}
System.out.println();
}
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-94l49R3l-1614818091111)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215231323635.png)]
增强for循环
主要用于集合或数组中
package com.shifei.struck.forDomo;
//增强for循环
public class Domo09
{
public static void main(String[] args)
{
int[] number={10,20,30,40,50};//定义了一个数组
//遍历两组元素
for (int i = 0; i < 5; i++)
{
System.out.println(number [i]);
}
System.out.println("------------------------");
for (int x:number)//增强for循环 简化程序
{
System.out.println(x);
}
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JeIeHJ35-1614818091112)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210215232452859.png)]
break&continue
break: 跳出一个循环,直接结束循环
**continue: 结束本次循环,继续执行下一次循环 **
package com.shifei.struck.forDomo;
//break
public class Domo10 {
public static void main(String[] args) {
int i=0;
while (i<100){
i++;
System.out.println(i);
if (i==20){
break;
}
}
System.out.println("1df5");
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1g2o5GGb-1614818091113)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210216012621596.png)]
package com.shifei.struck.forDomo;
//continue
public class Domo11 {
public static void main(String[] args) {
int i=0;
while (i<100){
i++;
if (i%10==0){
System.out.println();
continue;
}
System.out.println(i);
}
System.out.println("shdg");
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-swyc5J98-1614818091114)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210216013206680.png)]
了解 goto
goto常被用于跳出多重循环。但goto 语句的使用往往会使程序的可读性降低。
Java中依然保留了goto这个关键字留作备用,但这个关键字没有任何作用,只是为了将来可能的扩展,防止使用goto作为程序中的标识符。
虽然Java中的goto不起作用,但Java 中同样可以定义标签。例如:“mylabel:”
练习:打印101~150之间的质数(又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数,否则称为合数。)
package com.shifei.struck.forDomo;
//练习:打印101~150之间的质数 goto
public class Domo12 {
public static void main(String[] args) {
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+" ");
}
}
}
练习
-
打印三角形
package com.shifei.struck.forDomo; //打印三角形 public class Domo14 { public static void main(String[] args) { for (int i = 1; i <= 5; i++) { //固定在5行中 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(" "); //输出完后,换行 } } }