流程控制(内含scanner、if语句、switch语句、while和for循环)
用户交互Scanner
通过引用scanner类获取用户的输入,下面代码可以直接背着用
Scanner scanner = new Scanner(System.in);//获取键盘(控制台)输入的数据
灵活使用scanner的方法:
一般用的是nextLine()方法,而不是next()方法;
如果对数据类型有要求,可以使用nextInt()、nextFloat()、nextDouble()等方法
- 这里是next()方法
if (scanner.hasNext()){ //判断有没有字
String str = scanner.next(); //有字的条件为true的话就定义变量str
- 这里是nextLine()方法
if (scanner.hasNextLine()){
String str =scanner.nextLine();
//next()方法不能得到带有空格的字符串,而nextLine()方法可以
- 这里是nextInt()方法
if (scanner.hasNextInt()){
i = scanner.nextInt();
- 这里是nextDouble()方法
while (scanner.hasNextDouble()){
//scanner输入了有数据吗↓
double x =scanner.nextDouble();
//,有就用x接收scanner收到的一行数据
Scanner实例
慢慢看注释吧
//题目:我们输入多个数字,并求其总和与品均属每每输入
// 一个字母用回车确认,通过输入非数字来结束输入并输出执行结果
public class Demo05 {
public static void main(String[] args) {
//以下是自己写的
Scanner scanner = new Scanner(System.in);//获取键盘(控制台)输入的数据
System.out.println("请输入数字(输入字母用回车确认即可结算总和和平均数):");
double sum = 0;//总和
double cs=0;//次数
while (scanner.hasNextDouble()){
//scanner输入了有数据吗↓
double x =scanner.nextDouble();
//,有就用x接收scanner收到的一行数据
sum = sum + x;
//用sum累加每次输入的值
cs++;
//次数加1
System.out.println("这次是第"+cs+"次,该次的sum为:"+sum);
}//结束while循环
System.out.println("计算结束,总数为:"+sum+",平均数为:"+(sum/cs));
scanner.close();//记得挂掉IO流的类
}
}
运行结果:
顺序结构
是最简单的算法结构
任何一个算法都离不开的一种基本算法结构
选择结构
if选择结构
if单选择结构
if双选择结构
//例如
if (score>=60){
System.out.println("及格了");
}
else {
System.out.println("没及格");
}
if多选择结构
//例如
if (score==100){
System.out.println("恭喜满分");
}
else if (score<100&&score>=80){
System.out.println("优秀的");
}
else if (score<80&&score>=60){
System.out.println("及格了");
}
else if (score<60&&score>=0){
System.out.println("没及格,要再加油");
}
else {
System.out.println("请输入正确格式");
}
if嵌套结构
switch多选择结构
//没啥好说 直接看代码,个人喜好请包涵
switch (name){
case "子仁"://case有穿透功能
System.out.println("我");
break;//需要break停止穿透,如果没有break,后面的”喜欢看辉夜大小姐想让我告白“会一起输出
case "见青":
System.out.println("喜欢看");
break;
case "啊":
System.out.println("辉夜大小姐");
break;
default://除了以上三种情况外的情况执行这条指令
System.out.println("想让我告白");
}
需要提醒的JDK7之后switch语句才能使用String类型
其原理是将String的类型转为hashCode
(如何看到编译过的class呢)
1.先复制这里
2.把复制的路径打开,将里面的字节码文件放入到idea项目的包里面,如图
3.如何idea就会显示你能看得懂的字节码文件了,以下图片是对比图(右是字节码文件)
循环结构
while循环
//也是直接看例子吧
//题目是计算1+2+...+99+100的结果
int a = 0;
int b = 0;
while (a<=100){ //注意要有结束的条件,避免死循环
b=b+a;
a++;
System.out.println(b);
}
System.out.println("最终答案为"+b);
运行结果:
tips:这个是死循环
死循环也有自己的作用
do-while循环
相当于把中括号提前了并加了个do
代码例子:
While和do-While的区别:
- do-While至少被执行一次
- while是先判断再执行,do-while是先执行再判断
for循环
for循环的快捷键
先打要进行循环的次数,再输入“.for”
死循环的原理
for循环是先初始化,再判断布尔表达式,再更新,再判断布尔表达式,再更新,知道布尔表达式不满足true停止循环
for循环实例(乘法表)
//题目1:计算0到100之间的奇数和偶数的和
int maxo= 0;
int maxj= 0;
for (int i = 0;i<100;i+=1){
if (i%2==0){
maxo+=i;
}
else {
maxj+=i;
}
}
System.out.println("偶数总和为"+maxo+",奇数总数为"+maxj+",总计为"+(maxj+maxo) );
//题目2:用for循环输出1-1000之间能被5整除的数,并且每行输出3个
for (int i = 1; i <= 1000; i++) {
if (i%5==0){
System.out.print(i+" ");
//注意,如果是平常的System.out.println(),每个输出结构会隔一行
//但System.out.print()不会换行
}
if (i%15==0){
System.out.print("\n"); //复习一下\n是换行的意思,\t是8个空格即Tab的效果
}
}
//题目3:打印九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
//乘法表的技巧是先把一列写好,在利用循环嵌套好第一个循环,最后调整格式
System.out.print(i+"*"+j+"="+(i*j)+"\t");
}
System.out.println();
}
增强for循环
用于简化数组或集合的for循环
分割线划分了两种不同的数组的写法
int[] num = {10,20,30,40,50}; //定义了一个数组
for (int x: num){ //增强for循环 用来简化偷懒编写数组和集合的for循环的
System.out.println(x);
}
System.out.println("-----------");
for (int i = 0;i<5;i++){ //普通写法
System.out.println(num[i]);
}
break&continue
break用于终止循环
continue是终止正在跑的那次循环,跳过后面的东西再重新开始循环,例:
练习
//打印三角形,要把三角形拆分为三部分进行编码
for (int i = 1; i <= 5; i++) { //代表三角形的五行
for (int j = 5; j >= i; j--) {
System.out.print(" "); //代表左边由空格组成的小三角形
}
for (int u = 1; u <= i; u++) { //代表左边由星号组成的小三角形
System.out.print("*");
}
for (int k = 1; k < i; k++) { //代表右边由星号组成的小三角形
System.out.print("*");
}
System.out.println(); //每一行后记得换行,也能用\n代替
}
效果图:
如果不理解其中的运行的过程
左击边框直到出现红点点
点debug
点此图标代表下一步
心得:for循环嵌套理解可能会困难,但需要练习直到完全能自主编写出效果才行