回顾:
使用processon工具
程序的开发结构有3种:
- 顺序结构
- 分支结构
- 循环结构
1. 分支结构
1.1 条件判断语句
if else
1. 语法
if(表达式boolean){ //满足条件 true 执行if语句 }[else{ //false 执行else语句 }]
2. 案例
用户登录
public static void main(String[] args) { //真实的用户名和密码 String trueName = "admin"; int truePass = 1234; //用户登录的时候 提交的数据 String name = "admin"; int pass = 1111; //比较用户名和密码的数据 if (name.equals(trueName) && pass == truePass) { System.out.println("登录成功,欢迎你:" + name); //登录成功之后 执行很多其他的逻辑 } else { System.out.println("登录失败"); } }
3. 卫语句
编写代码的思想。 提高代码可读性。
public static void main(String[] args) { //真实的用户名和密码 String trueName = "admin"; int truePass = 1234; //用户登录的时候 提交的数据 String name = "admin"; int pass = 1234; //比较用户名和密码的数据 /*if (name.equals(trueName) && pass == truePass) { System.out.println("登录成功,欢迎你:" + name); //登录成功之后 执行很多其他的逻辑 } else { System.out.println("登录失败"); }*/ //登录失败 没有必要继续了 程序直接结束 return; //遇见return 程序结束了。 //获得相反的结果: 登录失败的条件 //卫语句 if(!name.equals(trueName) || pass!=truePass){ System.out.println("登录失败"); return; } System.out.println("登录成功,欢迎你:" + name); //bbdsbggdfhd }
4. 多重if(了解)
语法: if(){ }else if(){ } ...... else{ }
public static void main(String[] args) { //对学员的结业考试成绩评测 //成绩>=90 :优秀 //成绩>=80 :良好 //成绩>=60 :中等 //成绩<60 :差 Scanner input = new Scanner(System.in); System.out.println("请录入学生的姓名:"); String name = input.next(); System.out.println("请录入" + name + "的成绩:"); double score = input.nextDouble(); String level;//声明一个变量 /*if (score >= 90) { level = "优秀"; } if (score >= 80 && score < 90) { level = "良好"; } if (score >= 60 && score < 80) { level = "中等"; } if (score < 60) { level = "差"; }*/ //弊端: 都要进行4次比较 效率性能偏低 //多重if的逻辑 有且只走一次比较判断 if (score >= 80 && score < 90) { //一般将出现概率最高的放在第一个 level = "良好"; } else if (score >= 90) { level = "优秀"; } else if (score >= 60) { level = "中等"; } else { level = "差"; } System.out.println(name + "的成绩:" + level); input.close(); //debug调试程序运行流程 //前提: 打断点 //启动: debug as }
继续往下走,F7,走到下一行代码
批量清除断点
5. if_else嵌套
public static void main(String[] args) { //使用if_else求3个数值的最值 Scanner input = new Scanner(System.in); System.out.println("请录入3个数据:"); int num1 = input.nextInt(); int num2 = input.nextInt(); int num3 = input.nextInt(); int max; int min; if (num1 > num2) { if (num1 > num3) { max = num1; } else { max = num3; } if (num2 > num3) { min = num3; } else { min = num2; } } else { if (num2 > num3) { max = num2; } else { max = num3; } if (num1 > num3) { min = num3; } else { min = num1; } } System.out.println("最大值:" + max); System.out.println("最小值:" + min); }
1.2 条件选择语句
1. 语法
做等值判断。
switch(表达式){ //运算之后的结果数据类型: byte short int char enum String case 值1: //功能代码 [break;] case 值2: //功能代码 [break;] .... case 值n: //功能代码 [break;] default: //功能代码 [break;] } case之间是无序的。 如果case之间没有break 有可能会出现case之间的穿透。
2. 案例
根据用户动态录入的月份数据 打印输出这个月份是什么季节。
public static void main(String[] args) { //根据用户动态录入的月份数据 打印输出这个月份是什么季节。 Scanner input = new Scanner(System.in); System.out.println("动态录入的月份数据:(1-12)"); int month = input.nextInt(); String season = ""; //区间判断 if /*if (month == 3 || month == 4 || month == 5) { season = "春季"; } else if (month >= 6 && month <= 8) { season = "夏季"; } else if (month >= 9 && month <= 11) { season = "秋季"; } else { season = "冬季"; }*/ //等值判断 switch (month) { case 1: case 2: case 12: season = "冬季"; break; case 4: case 3: case 5: season = "春季"; break; case 6: case 7: case 8: season = "夏季"; break; case 9: case 10: // break;//跳出 结束当前switch语句 case 11: season = "秋季"; break; default: System.out.println("录入的数据有误"); break; } //break VS return // return: 结束main方法 // break 结束switch语句 System.out.println(month + "月份属于<<" + season + ">>"); }
1.3 Scanner
动态获得用户提交的数据。读取用户在控制台录入的数据。
jdk提供好的一个工具类。 java.util.Scanner
//导入Scanner位置(路径 在哪个包里面)----> 导包 java.util.Scanner //导包 import 包路径; public static void main(String[] args) { //创建Scanner 创建Scanner变量 //也是一个物理资源(需要释放资源) Scanner input = new Scanner(System.in); //System.in 录入 System.out.println("请录入用户名:"); String username = input.nextLine(); //读取用户录入数据赋值username System.out.println(username); System.out.println("请录入密码:"); int pass = input.nextInt(); System.out.println(pass); //物理资源(释放资源) //input.close(); //想要的数据是String: Scanner.nextLine(); 或者Scanner.next(); //(nextLine(是换行读取内容,且读取一整行);next(),nextInt()等只会读取空格前的内容, //遇到空格停止读取,且不换行,光标仍在当前行。(可看课堂练习) //想要的数据是int: Scanner.nextInt(); //想要的数据是double: Scanner.nextDouble(); //想要的数据是long: Scanner.nextLong(); }
2. 循环结构
目的 作用都是一样的 多次的执行同一个逻辑。
2.1 while
1. 语法
while(循环条件表达式){//boolean true //循环体 }
2. 案例
l 动态录入班级人数和学员成绩,计算班级学员的平均成绩
public class WhileDemo1 { public static void main(String[] args) { //动态录入班级人数和学员成绩,计算班级学员的平均成绩 Scanner input = new Scanner(System.in); System.out.println("录入学生的数量:"); int studentNum = input.nextInt(); double sum = 0; int count = 1; while (count <= studentNum) { //循环体了 System.out.println("请录入第" + count + "个学生的成绩:"); int studentScore = input.nextInt(); sum += studentScore; count++; } System.out.println("学生的平均成绩:" + (sum / studentNum)); input.close(); } }
l 2014年苹果手机售出10万,每年增长45%,请问按此增长速度,到哪一年苹果手机的出货量将达到100万
public static void main(String[] args) { //2014年苹果手机售出10万,每年增长45%,请问按此增长速度,到哪一年苹果手机的出货量将达到100万 //循环体 //循环条件 //何时结束循环 达到100万 int year = 2014; double num = 100000; while (num < 1000000) { year++; num *= 1.45; //num = (int) (num + num * 0.45); } System.out.println(num); System.out.println("到哪一年苹果手机的出货量将达到100万:" + year); }
2.2 do...while
1. 语法
do{ //循环体 }while(循环条件); 不管是否满足循环条件 至少执行一次循环体内容
2. 案例
模拟实现用户登录功能 有3次登录机会
public static void main(String[] args) { //模拟实现用户登录功能 登陆失败 有3次登录机会 Scanner input = new Scanner(System.in); String username = "admin"; String password = "1234"; int count = 3; do { count--; System.out.println("请录入用户名:"); String name = input.nextLine(); System.out.println("请录入密码:"); String pass = input.nextLine(); if (!username.equals(name) || !password.equals(pass)) { if (count == 0) { System.out.println("机会使用完毕 程序退出"); return; } System.out.println("登录失败,请重新登录,还剩下" + count + "次机会"); } else { System.out.println("登录成功,欢迎你:" + name); input.close(); return; } } while (count > 0); }
2.3 for(推荐)
1. 语法
for([表达式1];循环条件;[表达式2]){ //循环体 }
2. 案例
求1-n之间 所有的偶数个数以及所有的偶数和
public static void main(String[] args) { //求1-100之间 所有的偶数个数以及所有的偶数和 int sum = 0; int num = 0; for (int i = 1; i <= 100; i++) { if (i % 2 == 0) { //i就是偶数 num++; sum += i; } } System.out.println("偶数个数:" + num); System.out.println("偶数和:" + sum); }
使用for循环 打印以下内容:
2*5=10 4*10=40 6*15=90 .... ?*100=?
public static void main(String[] args) { //2*5=10 //4*10=40 //6*15=90 //.... //?*100=? int num1 = 2; int num2 = 5; for (; num2 <= 100; num1 += 2, num2 += 5) { System.out.println(num1 + "*" + num2 + "=" + (num1 * num2)); } }
3. for循环嵌套
打印九九乘法表
public static void main(String[] args) { for (int row = 1; row <= 9; row++) { for (int num1 = 1; num1 <= row; num1++) { System.out.print(num1 + "*" + row + "=" + (row * num1) + "\t"); } System.out.println(); } }
3. 流程语句关键字
3.1 break
只能与switch和循环语句结合使用。结束当前的循环或者switch。
public static void main(String[] args) { //模拟实现用户登录功能 登陆失败 有3次登录机会 Scanner input = new Scanner(System.in); String username = "admin"; String password = "1234"; int count = 3; String name; do { count--; System.out.println("请录入用户名:"); name = input.nextLine(); System.out.println("请录入密码:"); String pass = input.nextLine(); if (username.equals(name) && pass.equals(password)) { break; } if (count == 0) { System.out.println("机会使用完毕 程序退出"); return; } System.out.println("登录失败,请重新登录,还剩下" + count + "次机会"); } while (count > 0); System.out.println("登录成功,欢迎你:" + name); input.close(); }
打印1-n之间所有的偶数 只要打印前10个
public static void main(String[] args) { //打印1-n之间所有的偶数 只要打印前10个 int n = 10; int count = 1; for (int i = 1; i <= n; i++) { if (i % 2 == 0) { System.out.println("第" + count + "个偶数:" + i); if (count == 10) { break; } count++; } } System.out.println("----------------"); }
3.2 continue
只能在循环语句使用 。 使用了continue 跳出当前这次循环 继续执行下面所有的循环操作。
4.课堂练习
4.1if-else的使用(分支结构,条件判断语句)
public class IfDemo1 { public static void main(String[] args){ //使用变量定义一个男生基本信息 String name = "张三"; double height = 180; double balance = 10000; int age = 35; boolean isCoolBoy = true; //女生对男生要求:1.身高必须高于175,存款必须大于10W 2.男生要长的帅 String girlName = "乔碧萝"; String desc = "最美殿下乔碧萝"; /*if((height>175 && balance > 100000) || (isCoolBoy)){ //isCoolBoy后没必要加==true System.out.println(girlName + "可以继续与" +name + "聊"); }else{ System.out.println("pass............"); }*/ //单行注释ctrl+/ 多行注释Ctrl+shift+/ 美化布局Ctrl+alt+l //改进:if后的语句太长 //在if与else语句里,功能代码有且仅有一行,可省略{},不推荐省略 boolean flag = (height>175 && balance > 100000) || (isCoolBoy); if(flag){ //isCoolBoy后没必要加==true System.out.println(girlName + "可以继续与" +name + "聊"); }else { System.out.println("pass............"); } } }
4.2卫语句
public class UersLoginDemo { public static void main(String[] args){ //真实的用户名和密码 String trueName = "admin"; int truePass = 1234; //用户登录时提交的数据 String name = "admin"; int pass = 1111; //比较用户名和密码 /*if(name.equals(trueName) && pass==truePass){ System.out.println("登录成功,欢迎你" + name); }else{ System.out.println("登录失败"); }*/ //利用卫语句,登陆失败,退出,否则执行之后的语句 if(!name.equals(trueName) || pass != truePass){ System.out.println("登录失败"); return; //遇见return,程序结束 } System.out.println("登录成功,欢迎你" + name); } }
4.3Scanner,动态获得用户提交的数据
public class ScannerDemo { public static void main(String[] args){ //创建Scanner变量,除了变量input,其他地方固定形式 Scanner input = new Scanner(System.in);//scanner也是个物理资源,用完最后要释放 System.out.println("请录入用户名:"); String username = input.nextLine(); //字符串型也可用input.next(); 读取用户录入的数据赋值给username System.out.println(username); System.out.println("请录入密码:"); int pass = input.nextInt(); System.out.println(pass); input.close(); //释放资源 } } //数据是String 对应Scanner.nextLine(); int--------Scanner.nextInt(); double---------Scanner.nextDouble(); long------Scanner.nextLong();
4.4用Scanner动态获得用户信息
public class ScannerDemo2 { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("请录入用户姓名:"); String name = input.nextLine(); System.out.println(name); System.out.println("请录入" + name + "年龄"); byte age = input.nextByte(); System.out.println(age); System.out.println("请录入" + name + "生日"); String birthday = input.next(); System.out.println(birthday); System.out.println("请录入创建" + name + "一个时间:(yyyy-MM-dd HH:mm:ss)"); String createTime = input.next(); System.out.println(createTime); System.out.println(input.next()); //input.next().sout input.close(); } }
4.5多重if,有且只走一次
public class ifDemo { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("请录入学生的姓名:"); String name = input.next(); System.out.println(name); System.out.println("请录入" + name + "的成绩"); double score = input.nextDouble(); System.out.println(score); String level; if(score >= 80 && score < 90){ //概率大的放在最前,走了这个,后面不用走 level = "良好"; }else if(score >= 90){ level = "优秀"; }else if(score >= 60){ level = "中等"; }else { level = "差"; } System.out.println(name + "的成绩" + level); input.close(); } }
4.6if-else嵌套
public class IfDemo3 { public static void main(String[] args){ //求三个数的最值 Scanner input = new Scanner(System.in); System.out.println("请录入三个数据:"); int num1 = input.nextInt(); //input.nextInt().Var int num2 = input.nextInt(); int num3 = input.nextInt(); int max; if(num1 > num2) { if (num1 > num3) { max = num1; } else { max = num3; } }else if(num2 > num3){ max = num2; }else{ max = num3; } System.out.println("最大值" + max); } }
4.7Switch运算之后的结果byte short int char String enmu(枚举)
public class SwitchDemo { public static void main(String[] args){ //根据用户动态输入的月份数据,打印输出这个月是什么季节 Scanner input = new Scanner(System.in); System.out.println("动态录入的月份数据:"); int month = input.nextInt(); String season = ""; /* if(month == 3 || month ==4 || month == 5){ season = "春季"; }else if(month >= 6 && month <= 7){ season = "夏季"; }else if(month >= 9 && month <= 11){ season = "秋季"; }else { season = "冬季"; }*/ //break 跳出当前循环,结束当前switch语句 return 结束main方法 //switch可以穿透,且case语句没有顺序 switch(month){ case 1: case 2: case 12: season = "冬季"; break; case 4: case 3: case 5: season = "春季"; break; case 6: case 7: case 8: season = "夏季"; break; case 9: case 10: case 11: season = "冬季"; break; } System.out.println(month + "月份属于" + season); } } switch用于等值判断 if用于区间判断
4.8循环结构里的while
public class WhileDemo1 { public static void main(String[] args){ //动态录入班级人数和学员成绩,计算班级学员的平均成绩 Scanner input = new Scanner(System.in); System.out.println("录入学生的数量"); int StudentNum = input.nextInt(); double sum = 0; int count = 1; while(count <= StudentNum){ System.out.println("请录入第" + count + "个学生的成绩"); int StudentScore = input.nextInt(); sum += StudentScore; count++; } System.out.println("学生的平均成绩" + (sum/StudentNum)); input.close(); } }
4.9for循环
public class Homework10 { public static void main(String[] args){ int num1 = 2; int num2 = 5; for(;num2 <= 100;num1 += 2,num2 += 5 ){ System.out.println(num1 + "*" + num2 + "=" + (num1*num2)); } } }
4.10do-while循环
public class DoWhileDemo { public static void main(String[] args){ Scanner input = new Scanner(System.in); String username = "admin"; String password = "1234"; //ctrl+alt+t 选择循环体 int count = 3; do { count--; System.out.println("请录入用户名:"); String name = input.nextLine(); System.out.println("请录入密码"); String pass = input.nextLine(); if(!username.equals(name) || !password.equals(pass)){ if(count == 0){ System.out.println("机会使用完毕"); return; } System.out.println("登录失败,请重新登录,还剩下" + count +"次机会"); }else{ System.out.println("登录成功,欢迎您" + name); return; } } while (count > 0); input.close(); } }
4.11for循环嵌套
public class ForDemo1 { public static void main(String[] args){ for(int row = 1;row <= 9;row++){ for(int num1 = 1;num1 <= row;num1++){ System.out.print(num1 + "*" + row + "=" + (row*num1) + "\t"); //\t表示制表符,表示空格 注意这行print后没有ln } System.out.println(); //表示换行 } } }
5.课后作业
5.1 小林子买了一筐鸡蛋,如果坏蛋少于5个,他就吃掉,否则他就去退货
public class Homework1 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入坏蛋的个数:"); int badEggs = input.nextInt(); //能用卫语句就用 if (badEggs < 5) { System.out.println("小林吃掉"); return; } System.out.println("小林退掉"); input.close(); } }
5.2 现要求用户输入两个数a、b,如果a能被b整除或a加b大于1000,则输出a,否则输出b
public class Homework2 { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("请输入两个数:"); int a = input.nextInt(); int b = input.nextInt(); if(a % b ==0 || (a + b) > 1000){ System.out.println(a); return; } System.out.println(b); input.close(); } }
5.3 输入一个数,判断它是否能被3、5、7整除,注意考虑同时整除的情况(多重if实现)
public class Homework4 { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("请输入一个数:"); int num = input.nextInt(); int a = num % 3; int b = num % 5; int c = num % 7; if(a == 0 && b ==0 && c == 0){ System.out.println(num + "能同时被3,5,7整除"); }else if(a == 0 && b == 0){ System.out.println(num + "能同时被3,5整除,不能被7整除"); }else if(a == 0 && c == 0){ System.out.println(num + "能同时被3,7整除,不能被5整除"); }else if(b == 0 && c == 0){ System.out.println(num + "能同时被5,7整除,不能被3整除"); }else if(a == 0 ){ System.out.println(num + "能被3整除,不能被5,7整除"); }else if(b == 0 ){ System.out.println(num + "能被5整除,不能被3,7整除"); }else if(c == 0 ){ System.out.println(num + "能被7整除,不能被3,5整除"); }else{ System.out.println(num + "不能被3,5,7整除"); } input.close(); } }
5.4超市为了促销,规定:购物不足50元的按原价付款,超过50不足100的按九折付款,超过100元的,超过部分按八折付款。编程序完成超市的自动计费的工作。
public class Homework5 { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("消费达到:"); double amount = input.nextDouble(); if(amount < 50){ amount = amount; }else if(amount <= 100){ amount = amount*0.9 ; }else { amount = (100+(amount-100)*0.8) ; } System.out.println("应缴纳" + amount + "元"); input.close(); } }
5.5 要求用户输入一个0到2之间的整数 :如果用户输入0,输出“你出的是石头”;如果用户输入1,就输出“你出的是剪刀”;如果用户输入的是2就输出“你出的是布”。 然后再问是否要继续出拳,如果回答“y”就重复以上过程,否则结束程序 。
public class Homework7 { public static void main(String[] args){ Scanner input = new Scanner(System.in); //ctrl + alt +t 选择循环体 String answer; do { System.out.println("请用户输入一个0到2之间的整数:"); int num = input.nextInt(); String result = ""; switch(num) { case 1: result = "剪刀"; break; case 0: result = "石头"; break; case 2: result = "布"; break; } System.out.println("你出的是" + result); System.out.println("是否要继续出拳?y/n" ); answer = input.next(); } while ("y".equals(answer)); System.out.println("程序结束"); input.close(); } }
5.6/2个字符串数据进行比较,字符串是引用数据类型,默认值是null,一定要有已确定的数据调用equals功能和其他的字符串进行比较
String str = null; System.out.println(str.equals("hello")); //null不占用任何内存空间,只是一个标识。会报错,显示空指针 System.out.println("hello".equals(str)); //不会报错,显示false
5.7 银行取款系统的密码判断,输入密码之后,进行密码判断,如果密码错误,继续输入密码。 直到密码正确或者输入3次之后结束(密码可以是字符串也可以是int类型数值)
public class Homework8 { public static void main(String[] args){ Scanner input = new Scanner(System.in); String trueName = "admin"; int truePass = 1234; int count = 3; while (true) { count--; System.out.println("录入用户名:"); String name = input.next(); System.out.println("请输入密码:"); int pass = input.nextInt(); if(trueName.equals(name) && truePass == pass){ break; } if(count == 0){ System.out.println("三次机会使用完毕,登录失败" ); return; } System.out.println("登录失败,还剩下" + count + "次机会"); } System.out.println("登录成功,欢迎您:" + trueName); input.close(); } }
5.8 求1到100之间所有能被3整除的整数的总和
public class Homework9 { public static void main(String[] args){ int sum = 0; for(int i = 1;i <= 100;i++){ if(i % 3 == 0){ sum += i; } } System.out.println("1到100之间所有能被3整除的整数的总和为:" + sum); } }
5.9 打印出所有的 "水仙花数" ,所谓 "水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
public class Homework12 { public static void main(String[] args){ for(int i = 100;i < 1000;i++){ int bai = i / 100; int shi = i / 10 % 10; int ge = i % 10; int sum = (int)(Math.pow(bai,3) + Math.pow(shi,3) + Math.pow(ge,3)); //Math.pow是double型,要强转 if(i == sum ){ System.out.println("所有的水仙花数为:" + i); } } } }