网站建设公司软jian湖南岚鸿,php免费源码网站,百度销售平台怎样联系,一个女的让我和她做优惠网站第03章_流程控制语句
讲师#xff1a;尚硅谷-宋红康#xff08;江湖人称#xff1a;康师傅#xff09;
官网#xff1a;http://www.atguigu.com 本章专题与脉络 流程控制语句是用来控制程序中各语句执行顺序的语句#xff0c;可以把语句组合成能完成一定功能的小逻辑模…第03章_流程控制语句
讲师尚硅谷-宋红康江湖人称康师傅
官网http://www.atguigu.com 本章专题与脉络 流程控制语句是用来控制程序中各语句执行顺序的语句可以把语句组合成能完成一定功能的小逻辑模块。 程序设计中规定的三种流程结构即 顺序结构 程序从上到下逐行地执行中间没有任何判断和跳转。 分支结构 根据条件选择性地执行某段代码。 有if…else和switch-case两种分支语句。 循环结构 根据循环条件重复性的执行某段代码。 有for、while、do-while三种循环语句。 补充JDK5.0 提供了foreach循环方便的遍历集合、数组元素。第12章集合中讲解 生活中、工业生产中流程控制举例 1. 顺序结构
顺序结构就是程序从上到下逐行地执行。表达式语句都是顺序执行的。并且上一行对某个变量的修改对下一行会产生影响。 public class StatementTest{public static void main(String[] args){int x 1;int y 2;System.out.println(x x); System.out.println(y y); //对x、y的值进行修改x;y 2 * x y;x x * 10; System.out.println(x x);System.out.println(y y);}
}
Java中定义变量时采用合法的前向引用。如
public static void main(String[] args) {int num1 12;int num2 num1 2;
}
错误形式
public static void main(String[] args) {int num2 num1 2;int num1 12;
}
2. 分支语句
2.1 if-else条件判断结构
2.1.1 基本语法
结构1单分支条件判断if
格式
if(条件表达式)语句块;说明条件表达式必须是布尔表达式关系表达式或逻辑表达式或 布尔变量。
执行流程 首先判断条件表达式看其结果是true还是false 如果是true就执行语句块 如果是false就不执行语句块 结构2双分支条件判断if...else
格式
if(条件表达式) { 语句块1;
}else {语句块2;
}
执行流程 首先判断条件表达式看其结果是true还是false 如果是true就执行语句块1 如果是false就执行语句块2 结构3多分支条件判断if...else if...else
格式
if (条件表达式1) {语句块1;
} else if (条件表达式2) {语句块2;
}
...
}else if (条件表达式n) {语句块n;
} else {语句块n1;
}
说明一旦条件表达式为true则进入执行相应的语句块。执行完对应的语句块之后就跳出当前结构。
执行流程 首先判断关系表达式1看其结果是true还是false 如果是true就执行语句块1然后结束当前多分支 如果是false就继续判断关系表达式2看其结果是true还是false 如果是true就执行语句块2然后结束当前多分支 如果是false就继续判断关系表达式…看其结果是true还是false
…
n. 如果没有任何关系表达式为true就执行语句块n1然后结束当前多分支。 2.1.2 应用举例
案例1成年人心率的正常范围是每分钟60-100次。体检时如果心率不在此范围内则提示需要做进一步的检查。
public class IfElseTest1 {public static void main(String[] args){int heartBeats 89;
if(heartBeats 60 || heartBeats 100){System.out.println(你需要做进一步的检查);}
System.out.println(体检结束);}
}
案例2定义一个整数判定是偶数还是奇数
public class IfElseTest2 {public static void main(String[] args){int a 10;
if(a % 2 0) {System.out.println(a 是偶数);} else{System.out.println(a 是奇数);}}
}
案例3
岳小鹏参加Java考试他和父亲岳不群达成承诺
如果
成绩为100分时奖励一辆跑车
成绩为(8099]时奖励一辆山地自行车
当成绩为[60,80]时奖励环球影城一日游
其它时胖揍一顿。说明默认成绩是在[0,100]范围内
public class IfElseTest3 {public static void main(String[] args) {int score 67;//岳小鹏的期末成绩//写法一默认成绩范围为[0,100]if(score 100){System.out.println(奖励一辆跑车);}else if(score 80 score 99){ //错误的写法}else if(80 score 99){System.out.println(奖励一辆山地自行车);}else if(score 60 score 80){System.out.println(奖励环球影城玩一日游);}//else{// System.out.println(胖揍一顿);//}//写法二// 默认成绩范围为[0,100]if(score 100){System.out.println(奖励一辆跑车);}else if(score 80){System.out.println(奖励一辆山地自行车);}else if(score 60){System.out.println(奖励环球影城玩一日游);}else{System.out.println(胖揍一顿);}}
} 当条件表达式之间是“互斥”关系时即彼此没有交集条件判断语句及执行语句间顺序无所谓。 当条件表达式之间是“包含”关系时“小上大下 / 子上父下”否则范围小的条件表达式将不可能被执行。 2.1.3 if...else嵌套
在 if 的语句块中或者是在else语句块中又包含了另外一个条件判断可以是单分支、双分支、多分支就构成了嵌套结构。
执行的特点 1如果是嵌套在if语句块中的只有当外部的if条件满足才会去判断内部的条件 2如果是嵌套在else语句块中的只有当外部的if条件不满足进入else后才会去判断内部的条件
案例4由键盘输入三个整数分别存入变量num1、num2、num3对它们进行排序(使用 if-else if-else)并且从小到大输出。
class IfElseTest4 {public static void main(String[] args) {//声明num1,num2,num3三个变量并赋值int num1 23,num2 32,num3 12;if(num1 num2){if(num3 num1)System.out.println(num2 - num1 - num3);else if(num3 num2)System.out.println(num3 - num2 - num1);elseSystem.out.println(num2 - num3 - num1);}else{ //num1 num2if(num3 num2){System.out.println(num1 - num2 - num3);}else if(num3 num1){System.out.println(num3 - num1 - num2);}else{System.out.println(num1 - num3 - num2);}}}
}
2.1.4 其它说明 语句块只有一条执行语句时一对{}可以省略但建议保留 当if-else结构是“多选一”时最后的else是可选的根据需要可以省略
2.1.5 练习
练习1
//1)对下列代码若有输出指出输出结果。
int x 4;
int y 1;
if (x 2) {if (y 2) System.out.println(x y);System.out.println(atguigu);
} elseSystem.out.println(x is x);
练习2
boolean b true;
//如果写成if(bfalse)能编译通过吗如果能结果是
if(b false) //建议if(!b)System.out.println(a);
else if(b)System.out.println(b);
else if(!b)System.out.println(c);
elseSystem.out.println(d);
练习3
定义两个整数分别为small 和 big如果第一个整数small大于第二个整数big就交换。输出显示small和big变量的值。
public class IfElseExer3 {public static void main(String[] args) {int small 10;int big 9;if (small big) {int temp small;small big;big temp;}System.out.println(small small ,big big);}
}
练习4小明参加期末Java考试通过考试成绩判断其Java等级成绩范围[0,100] 90-100 优秀 80-89 好 70-79 良 60-69 及格 60以下 不及格
import java.util.Scanner;
//写法一
public class IfElseExer4 {public static void main(String[] args) {System.out.print(小明的期末Java成绩是[0,100]);int score 89;if (score 0 || score 100) {System.out.println(你的成绩是错误的);} else if (score 90 score 100) {System.out.println(你的成绩属于优秀);} else if (score 80 score 90) {System.out.println(你的成绩属于好);} else if (score 70 score 80) {System.out.println(你的成绩属于良);} else if (score 60 score 70) {System.out.println(你的成绩属于及格);} else {System.out.println(你的成绩属于不及格);}}
}import java.util.Scanner;
//写法二
public class IfElseExer4 {public static void main(String[] args) {System.out.print(小明的期末Java成绩是[0,100]);int score 89;if (score 0 || score 100) {System.out.println(你的成绩是错误的);} else if (score 90) {System.out.println(你的成绩属于优秀);} else if (score 80) {System.out.println(你的成绩属于好);} else if (score 70) {System.out.println(你的成绩属于良);} else if (score 60) {System.out.println(你的成绩属于及格);} else {System.out.println(你的成绩属于不及格);}}
}练习5
编写程序声明2个int型变量并赋值。判断两数之和如果大于等于50打印“hello world!”
public class IfElseExer5 {public static void main(String[] args) {int num1 12, num2 32;if (num1 num2 50) {System.out.println(hello world!);}}
}
练习6
编写程序声明2个double型变量并赋值。判断第一个数大于10.0且第2个数小于20.0打印两数之和。否则打印两数的乘积。
public class IfElseExer6 {public static void main(String[] args) {double d1 21.2,d2 12.3;if(d1 10.0 d2 20.0){System.out.println(两数之和为 (d1 d2));}else{System.out.println(两数乘积为 (d1 * d2));}}}
练习7判断水的温度
如果大于95℃则打印“开水”如果大于70℃且小于等于95℃则打印“热水”如果大于40℃且小于等于70℃则打印“温水”如果小于等于40℃则打印“凉水”。
public class IfElseExer7 {public static void main(String[] args) {int waterTemperature 85;if(waterTemperature 95){System.out.println(开水);}else if(waterTemperature 70 waterTemperature 95){System.out.println(热水);}else if(waterTemperature 40 waterTemperature 70){System.out.println(温水);}else{System.out.println(凉水);}}}
2.2 switch-case选择结构
2.2.1 基本语法
语法格式
switch(表达式){case 常量值1:语句块1;//break;case 常量值2:语句块2;//break; // ...[default:语句块n1;break;]
}
执行流程图 执行过程
第1步根据switch中表达式的值依次匹配各个case。如果表达式的值等于某个case中的常量值则执行对应case中的执行语句。
第2步执行完此case的执行语句以后 情况1如果遇到break,则执行break并跳出当前的switch-case结构 情况2如果没有遇到break则会继续执行当前case之后的其它case中的执行语句。---case穿透 ... 直到遇到break关键字或执行完所有的case及default的执行语句跳出当前的switch-case结构
使用注意点 switch(表达式)中表达式的值必须是下述几种类型之一byteshortcharint枚举 (jdk 5.0)String (jdk 7.0) case子句中的值必须是常量不能是变量名或不确定的表达式值或范围 同一个switch语句所有case子句中的常量值互不相同 break语句用来在执行完一个case分支后使程序跳出switch语句块 如果没有break程序会顺序执行到switch结尾 default子句是可选的。同时位置也是灵活的。当没有匹配的case时执行default语句。
2.2.2 应用举例
案例1
public class SwitchCaseTest1 {public static void main(String args[]) {int num 1;switch(num){case 0:System.out.println(zero);break;case 1:System.out.println(one);break;case 2:System.out.println(two);break;case 3:System.out.println(three);break;default:System.out.println(other);//break;}}
}
案例2
public class SwitchCaseTest2 {public static void main(String args[]) {String season summer;switch (season) {case spring:System.out.println(春暖花开);break;case summer:System.out.println(夏日炎炎);break;case autumn:System.out.println(秋高气爽);break;case winter:System.out.println(冬雪皑皑);break;default:System.out.println(季节输入有误);break;}}
}
错误举例
int key 10;
switch(key){case key 0 :System.out.println(正数);break;case key 0:System.out.println(负数);break;default:System.out.println(零);break;
}
案例3使用switch-case实现对学生成绩大于60分的输出“合格”。低于60分的输出“不合格”。
class SwitchCaseTest3 {public static void main(String[] args) {int score 67;/*写法1极不推荐switch(score){case 0:System.out.println(不及格);break;case 1:System.out.println(不及格);break;//...case 60:System.out.println(及格);break;//...略...}*///写法2switch(score / 10){case 0:case 1:case 2:case 3:case 4:case 5:System.out.println(不及格);break;case 6:case 7:case 8:case 9:case 10:System.out.println(及格);break;default:System.out.println(输入的成绩有误);break;}//写法3switch(score / 60){case 0:System.out.println(不及格);break;case 1:System.out.println(及格);break;default:System.out.println(输入的成绩有误);break;}}
}
2.2.3 利用case的穿透性
在switch语句中如果case的后面不写break将出现穿透现象也就是一旦匹配成功不会在判断下一个case的值直接向后运行直到遇到break或者整个switch语句结束执行终止。
案例4编写程序从键盘上输入2023年的“month”和“day”要求通过程序输出输入的日期为2023年的第几天。
import java.util.Scanner;class SwitchCaseTest4 {public static void main(String[] args) {Scanner scan new Scanner(System.in);System.out.println(请输入2023年的month:);int month scan.nextInt();System.out.println(请输入2023年的day:);int day scan.nextInt();//这里就不针对month和day进行合法性的判断了以后可以使用正则表达式进行校验。int sumDays 0;//记录总天数//写法1 不推荐存在冗余的数据/*switch(month){case 1:sumDays day;break;case 2:sumDays 31 day;break;case 3:sumDays 31 28 day;break;//....case 12://sumDays 31 28 ... 30 day;break;}*///写法2推荐switch(month){case 12:sumDays 30;//这个30是代表11月份的满月天数case 11:sumDays 31;//这个31是代表10月份的满月天数case 10:sumDays 30;//这个30是代表9月份的满月天数case 9:sumDays 31;//这个31是代表8月份的满月天数case 8:sumDays 31;//这个31是代表7月份的满月天数case 7:sumDays 30;//这个30是代表6月份的满月天数case 6:sumDays 31;//这个31是代表5月份的满月天数case 5:sumDays 30;//这个30是代表4月份的满月天数case 4:sumDays 31;//这个31是代表3月份的满月天数case 3:sumDays 28;//这个28是代表2月份的满月天数case 2:sumDays 31;//这个31是代表1月份的满月天数case 1:sumDays day;//这个day是代表当月的第几天}System.out.println(month 月 day 日是2023年的第 sumDays 天);//关闭资源scan.close();}
}
拓展
从键盘分别输入年、月、日判断这一天是当年的第几天注判断一年是否是闰年的标准1可以被4整除但不可被100整除或2可以被400整除例如19002200等能被4整除但同时能被100整除但不能被400整除不是闰年
import java.util.Scanner;public class SwitchCaseTest04 {public static void main(String[] args) {Scanner scanner new Scanner(System.in);System.out.print(请输入year:);int year scanner.nextInt();System.out.print(请输入month:);int month scanner.nextInt();System.out.print(请输入day:);int day scanner.nextInt();//判断这一天是当年的第几天从1月1日开始累加到xx月xx日这一天//(1)[1,month-1]个月满月天数//(2)单独考虑2月份是否是29天依据是看year是否是闰年//(3)第month个月的day天//声明一个变量days用来存储总天数int sumDays 0;//累加[1,month-1]个月满月天数switch (month) {case 12://累加的1-11月sumDays 30;//这个30是代表11月份的满月天数//这里没有break继续往下走case 11://累加的1-10月sumDays 31;//这个31是代表10月的满月天数//这里没有break继续往下走case 10:sumDays 30;//9月case 9:sumDays 31;//8月case 8:sumDays 31;//7月case 7:sumDays 30;//6月case 6:sumDays 31;//5月case 5:sumDays 30;//4月case 4:sumDays 31;//3月case 3:sumDays 28;//2月//在这里考虑是否可能是29天if (year % 4 0 year % 100 ! 0 || year % 400 0) {sumDays;//多加1天}case 2:sumDays 31;//1月case 1:sumDays day;//第month月的day天}//输出结果System.out.println(year 年 month 月 day 日是这一年的第 sumDays 天);scanner.close();}
}
案例5根据指定的月份输出对应季节
import java.util.Scanner;/** 需求指定一个月份输出该月份对应的季节。一年有四季:* 3,4,5 春季* 6,7,8 夏季* 9,10,11 秋季* 12,1,2 冬季*/
public class SwitchCaseTest5 {public static void main(String[] args) {Scanner input new Scanner(System.in);System.out.print(请输入月份);int month input.nextInt();/*switch(month) {case 1:System.out.println(冬季);break;case 2:System.out.println(冬季);break;case 3:System.out.println(春季);break;case 4:System.out.println(春季);break;case 5:System.out.println(春季);break;case 6:System.out.println(夏季);break;case 7:System.out.println(夏季);break;case 8:System.out.println(夏季);break;case 9:System.out.println(秋季);break;case 10:System.out.println(秋季);break;case 11:System.out.println(秋季);break;case 12:System.out.println(冬季);break;default:System.out.println(你输入的月份有误);break;}*/// 改进版switch(month) {case 1:case 2:case 12:System.out.println(冬季);break;case 3:case 4:case 5:System.out.println(春季);break;case 6:case 7:case 8:System.out.println(夏季);break;case 9:case 10:case 11:System.out.println(秋季);break;default:System.out.println(你输入的月份有误);break;}input.close();}
}常见错误实现
switch(month){case 3|4|5://3|4|5 用了位运算符11 | 100 | 101结果是 111是7System.out.println(春季);break;case 6|7|8://6|7|8用了位运算符110 | 111 | 1000结果是1111是15System.out.println(夏季);break;case 9|10|11://9|10|11用了位运算符1001 | 1010 | 1011结果是1011是11System.out.println(秋季);break;case 12|1|2://12|1|2 用了位运算符1100 | 1 | 10 结果是1111是15System.out.println(冬季);break;default:System.out.println(输入有误);
}
使用if-else实现
if ((month 1) || (month 2) || (month 12)) {System.out.println(冬季);
} else if ((month 3) || (month 4) || (month 5)) {System.out.println(春季);
} else if ((month 6) || (month 7) || (month 8)) {System.out.println(夏季);
} else if ((month 9) || (month 10) || (month 11)) {System.out.println(秋季);
} else {System.out.println(你输入的月份有误);
}
2.2.4 if-else语句与switch-case语句比较 结论凡是使用switch-case的结构都可以转换为if-else结构。反之不成立。 开发经验如果既可以使用switch-case又可以使用if-else建议使用switch-case。因为效率稍高。 细节对比 if-else语句优势 if语句的条件是一个布尔类型值if条件表达式为true则进入分支可以用于范围的判断也可以用于等值的判断使用范围更广。 switch语句的条件是一个常量值byte,short,int,char,枚举,String只能判断某个变量或表达式的结果是否等于某个常量值使用场景较狭窄。 switch语句优势 当条件是判断某个变量或表达式是否等于某个固定的常量值时使用if和switch都可以习惯上使用switch更多。因为效率稍高。当条件是区间范围的判断时只能使用if语句。 使用switch可以利用穿透性同时执行多个分支而if...else没有穿透性。 案例只能使用 if-else 从键盘输入一个整数判断是正数、负数、还是零。
import java.util.Scanner;public class IfOrSwitchDemo {public static void main(String[] args) {Scanner input new Scanner(System.in);System.out.print(请输入整数);int num input.nextInt();if (num 0) {System.out.println(num 是正整数);} else if (num 0) {System.out.println(num 是负整数);} else {System.out.println(num 是零);}input.close();}
}
2.2.5 练习
练习1从键盘输入星期的整数值输出星期的英文单词
import java.util.Scanner;public class SwitchCaseExer1 {public static void main(String[] args) {//定义指定的星期Scanner input new Scanner(System.in);System.out.print(请输入星期值);int weekday input.nextInt();//switch语句实现选择switch(weekday) {case 1:System.out.println(Monday);break;case 2:System.out.println(Tuesday);break;case 3:System.out.println(Wednesday);break;case 4:System.out.println(Thursday);break;case 5:System.out.println(Friday);break;case 6:System.out.println(Saturday);break;case 7:System.out.println(Sunday);break;default:System.out.println(你输入的星期值有误);break;}input.close();}
}
练习2
使用 switch 把小写类型的 char型转为大写。只转换 a, b, c, d, e. 其它的输出 “other”。
public class SwitchCaseExer2 {public static void main(String[] args) {char word c;switch (word) {case a:System.out.println(A);break;case b:System.out.println(B);break;case c:System.out.println(C);break;case d:System.out.println(D);break;case e:System.out.println(E);break;default :System.out.println(other);}}
}
练习3
编写程序从键盘上读入一个学生成绩存放在变量score中根据score的值输出其对应的成绩等级score90 等级: A
70score90 等级: B
60score70 等级: C
score60 等级: D方式一使用if-else
方式二使用switch-case: score / 10: 0 - 10public class SwitchCaseExer3 {public static void main(String[] args) {Scanner scan new Scanner(System.in);System.out.println(请输入学生成绩);int score scan.nextInt();char grade;//记录学生等级//方式1
// if(score 90){
// grade A;
// }else if(score 70 score 90){
// grade B;
// }else if(score 60 score 70){
// grade C;
// }else{
// grade D;
// }//方式2switch(score / 10){case 10:case 9:grade A;break;case 8:case 7:grade B;break;case 6:grade C;break;default :grade D;}System.out.println(学生成绩为 score ,对应的等级为 grade);scan.close();}
}
练习4
编写一个程序为一个给定的年份找出其对应的中国生肖。中国的生肖基于12年一个周期每年用一个动物代表rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、rooster、dog、pig。提示2022年虎 2022 % 12 6 /*** author 尚硅谷-宋红康* create 18:55*/
public class SwitchCaseExer4 {public static void main(String[] args){//从键盘输入一个年份Scanner input new Scanner(System.in);System.out.print(请输入年份);int year input.nextInt();input.close();//判断switch(year % 12){case 0:System.out.println(year 是猴年);break;case 1:System.out.println(year 是鸡年);break;case 2:System.out.println(year 是狗年);break;case 3:System.out.println(year 是猪年);break;case 4:System.out.println(year 是鼠年);break;case 5:System.out.println(year 是牛年);break;case 6:System.out.println(year 是虎年);break;case 7:System.out.println(year 是兔年);break;case 8:System.out.println(year 是龙年);break;case 9:System.out.println(year 是蛇年);break;case 10:System.out.println(year 是马年);break;case 11:System.out.println(year 是羊年);break;default:System.out.println(year 输入错误);}}
}
练习5押宝游戏
随机产生3个1-6的整数如果三个数相等那么称为“豹子”如果三个数之和大于9称为“大”如果三个数之和小于等于9称为“小”用户从键盘输入押的是“豹子”、“大”、“小”并判断是否猜对了提示随机数 Math.random()产生 [0,1)范围内的小数如何获取[a,b]范围内的随机整数呢(int)(Math.random() * (b - a 1)) a import java.util.Scanner;public class SwitchCaseExer5 {public static void main(String[] args) {//1、随机产生3个1-6的整数int a (int)(Math.random()*6 1);int b (int)(Math.random()*6 1);int c (int)(Math.random()*6 1);//2、押宝Scanner input new Scanner(System.in);System.out.print(请押宝豹子、大、小);String ya input.next();input.close();//3、判断结果boolean result false;//switch支持String类型switch (ya){case 豹子: result a b b c; break;case 大: result a b c 9; break;case 小: result a b c 9; break;default:System.out.println(输入有误);}System.out.println(a,b,c分别是 a , b , c );System.out.println(result ? 猜中了 : 猜错了);}
}
练习6
使用switch语句改写下列if语句int a 3;
int x 100;
if(a1)x5;
else if(a2)x10;
else if(a3)x16;
elsex34;
int a 3;
int x 100;switch(a){case 1:x 5;break;case 2:x 10;break;case 3:x 16;break;default :x 34;}
3. 循环语句 理解循环语句具有在某些条件满足的情况下反复执行特定代码的功能。 循环结构分类 for 循环 while 循环 do-while 循环 循环结构四要素 初始化部分 循环条件部分 循环体部分 迭代部分
3.1 for循环
3.1.1 基本语法
语法格式
for (①初始化部分; ②循环条件部分; ④迭代部分)③循环体部分;执行过程①-②-③-④-②-③-④-②-③-④-.....-②
图示 说明 for(;;)中的两个不能多也不能少 ①初始化部分可以声明多个变量但必须是同一个类型用逗号分隔 ②循环条件部分为boolean类型表达式当值为false时退出循环 ④可以有多个变量更新用逗号分隔
3.1.2 应用举例
案例1使用for循环重复执行某些语句
题目输出5行HelloWorld
public class ForTest1 {public static void main(String[] args) {//需求1控制台输出5行Hello World!//写法1//System.out.println(Hello World!);//System.out.println(Hello World!);//System.out.println(Hello World!);//System.out.println(Hello World!);//System.out.println(Hello World!);//写法2for(int i 1;i 5;i){System.out.println(Hello World!);}}
}
案例2格式的多样性
题目写出输出的结果
public class ForTest2 {public static void main(String[] args) {int num 1;for(System.out.print(a);num 3;System.out.print(c),num){System.out.print(b);}}
}
案例3累加的思想
题目遍历1-100以内的偶数并获取偶数的个数获取所有的偶数的和
public class ForTest3 {public static void main(String[] args) {int count 0;//记录偶数的个数int sum 0;//记录偶数的和for(int i 1;i 100;i){if(i % 2 0){System.out.println(i);count;sum i;} //System.out.println(偶数的个数为 count);}System.out.println(偶数的个数为 count); System.out.println(偶数的总和为 sum);}
}
案例4结合分支结构使用
题目输出所有的水仙花数所谓水仙花数是指一个3位数其各个位上数字立方和等于其本身。例如 153 1*1*1 3*3*3 5*5*5
public class ForTest4 {public static void main(String[] args) {//定义统计变量初始化值是0int count 0;//获取三位数用for循环实现for(int x 100; x 1000; x) {//获取三位数的个位十位百位int ge x % 10;int shi x / 10 % 10;int bai x / 100;//判断这个三位数是否是水仙花数如果是统计变量if((ge*ge*geshi*shi*shibai*bai*bai) x) {System.out.println(水仙花数 x);count;}}//输出统计结果就可以了System.out.println(水仙花数共有count个);}
}
拓展
打印出四位数字中“个位百位”等于“十位千位”并且个位数为偶数千位数为奇数的数字并打印符合条件的数字的个数。
案例5结合break的使用
说明输入两个正整数m和n求其最大公约数和最小公倍数。
比如12和20的最大公约数是4最小公倍数是60。
/*** author 尚硅谷-宋红康* create 17:43*/
public class ForTest5 {public static void main(String[] args) {//需求1最大公约数int m 12, n 20;//取出两个数中的较小值int min (m n) ? m : n;for (int i min; i 1; i--) {//for(int i 1;i min;i){if (m % i 0 n % i 0) {System.out.println(最大公约数是 i); //公约数break; //跳出当前循环结构}}//需求2最小公倍数//取出两个数中的较大值int max (m n) ? m : n;for (int i max; i m * n; i) {if (i % m 0 i % n 0) {System.out.println(最小公倍数是 i);//公倍数break;}}}
} 说明 1、我们可以在循环中使用break。一旦执行break就跳出当前循环结构。 2、小结如何结束一个循环结构 结束情况1循环结构中的循环条件部分返回false 结束情况2循环结构中执行了break。 3、如果一个循环结构不能结束那就是一个死循环我们开发中要避免出现死循环。 3.1.3 练习
练习1打印1~100之间所有奇数的和
public class ForExer1 {public static void main(String[] args) {int sum 0;//记录奇数的和for (int i 1; i 100; i) {if(i % 2 ! 0){sum i;}}System.out.println(奇数总和为 sum);}
}
练习2打印1~100之间所有是7的倍数的整数的个数及总和体会设置计数器的思想
public class ForExer2 {public static void main(String[] args) {int sum 0;//记录总和int count 0;//记录个数for (int i 1; i 100; i) {if(i % 7 0){sum i;count;}}System.out.println(1~100之间所有是7的倍数的整数的和为 sum);System.out.println(1~100之间所有是7的倍数的整数的个数为 count);}
}
练习3
编写程序从1循环到150并在每行打印一个值另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。 public class ForExer3 {public static void main(String[] args) {for (int i 1; i 150; i) {System.out.print(i \t);if(i % 3 0){System.out.print(foo\t);}if(i % 5 0){System.out.print(biz\t);}if(i % 7 0){System.out.print(baz\t);}System.out.println();}}
}
3.2 while循环
3.2.1 基本语法
语法格式
①初始化部分
while(②循环条件部分)③循环体部分;④迭代部分;
}
执行过程①-②-③-④-②-③-④-②-③-④-...-②
图示 说明 while(循环条件)中循环条件必须是boolean类型。 注意不要忘记声明④迭代部分。否则循环将不能结束变成死循环。 for循环和while循环可以相互转换。二者没有性能上的差别。实际开发中根据具体结构的情况选择哪个格式更合适、美观。 for循环与while循环的区别初始化条件部分的作用域不同。
3.2.2 应用举例
案例1输出5行HelloWorld!
class WhileTest1 {public static void main(String[] args) {int i 1;while(i 5){System.out.println(Hello World!);i;}}
}
案例2遍历1-100的偶数并计算所有偶数的和、偶数的个数累加的思想
class WhileTest2 {public static void main(String[] args) {//遍历1-100的偶数并计算所有偶数的和、偶数的个数累加的思想int num 1;int sum 0;//记录1-100所有的偶数的和int count 0;//记录1-100之间偶数的个数while(num 100){if(num % 2 0){System.out.println(num);sum num;count;}//迭代条件num;}System.out.println(偶数的总和为 sum);System.out.println(偶数的个数为 count);}
}
案例3猜数字游戏
随机生成一个100以内的数猜这个随机数是多少从键盘输入数如果大了提示大了如果小了提示小了如果对了就不再猜了并统计一共猜了多少次。提示生成一个[a,b] 范围的随机数的方式(int)(Math.random() * (b - a 1) a)
/*** author 尚硅谷-宋红康* create 16:42*/
public class GuessNumber {public static void main(String[] args) {//获取一个随机数int random (int) (Math.random() * 100) 1;//记录猜的次数int count 1;//实例化ScannerScanner scan new Scanner(System.in);System.out.println(请输入一个整数(1-100):);int guess scan.nextInt();while (guess ! random) {if (guess random) {System.out.println(猜大了);} else if (guess random) {System.out.println(猜小了);}System.out.println(请输入一个整数(1-100):);guess scan.nextInt();//累加猜的次数count;}System.out.println(猜中了);System.out.println(一共猜了 count 次);}
}
案例4折纸珠穆朗玛峰
世界最高山峰是珠穆朗玛峰它的高度是8848.86米假如我有一张足够大的纸它的厚度是0.1毫米。
请问我折叠多少次可以折成珠穆朗玛峰的高度?
/*** author 尚硅谷-宋红康* create 19:08*/
public class ZFTest {public static void main(String[] args) {//定义一个计数器初始值为0int count 0;//定义珠穆朗玛峰的高度int zf 8848860;//单位毫米double paper 0.1;//单位毫米while(paper zf){//在循环中执行累加对应折叠了多少次count;paper * 2;//循环的执行过程中每次纸张折叠纸张的厚度要加倍}//打印计数器的值System.out.println(需要折叠 count 次);System.out.println(折纸的高度为 paper/1000 米超过了珠峰的高度);}
}
3.2.3 练习
练习从键盘输入整数输入0结束统计输入的正数、负数的个数。
import java.util.Scanner;public class Test05While {public static void main(String[] args) {Scanner input new Scanner(System.in);int positive 0; //记录正数的个数int negative 0; //记录负数的个数int num 1; //初始化为特殊值使得第一次循环条件成立while(num ! 0){System.out.print(请输入整数0表示结束);num input.nextInt();if(num 0){positive;}else if(num 0){negative;}}System.out.println(正数个数 positive);System.out.println(负数个数 negative);input.close();}
}3.3 do-while循环
3.3.1 基本语法
语法格式
①初始化部分;
do{③循环体部分④迭代部分
}while(②循环条件部分);
执行过程①-③-④-②-③-④-②-③-④-...-②
图示 说明 结尾while(循环条件)中循环条件必须是boolean类型 do{}while();最后有一个分号 do-while结构的循环体语句是至少会执行一次这个和for和while是不一样的 循环的三个结构for、while、do-while三者是可以相互转换的。
3.3.2 应用举例
案例1遍历1-100的偶数并计算所有偶数的和、偶数的个数累加的思想
class DoWhileTest1 {public static void main(String[] args) {//遍历1-100的偶数并计算所有偶数的和、偶数的个数累加的思想//初始化部分int num 1;int sum 0;//记录1-100所有的偶数的和int count 0;//记录1-100之间偶数的个数do{//循环体部分if(num % 2 0){System.out.println(num);sum num;count;}num;//迭代部分}while(num 100); //循环条件部分System.out.println(偶数的总和为 sum);System.out.println(偶数的个数为 count);}
}案例2体会do-while至少会执行一次循环体
class DoWhileTest2 {public static void main(String[] args) {//while循环:int num1 10;while(num1 10){System.out.println(hello:while);num1--;}//do-while循环:int num2 10;do{System.out.println(hello:do-while);num2--;}while(num2 10);}
}
案例3ATM取款
声明变量balance并初始化为0用以表示银行账户的余额下面通过ATM机程序实现存款取款等功能。ATM1、存款2、取款3、显示余额4、退出
请选择(1-4)
import java.util.Scanner;/*** author 尚硅谷-宋红康* create 19:12*/
public class ATM {public static void main(String[] args) {//初始化条件double balance 0.0;//表示银行账户的余额Scanner scan new Scanner(System.in);boolean isFlag true;//用于控制循环的结束do{System.out.println(ATM);System.out.println(\t1、存款);System.out.println(\t2、取款);System.out.println(\t3、显示余额);System.out.println(\t4、退出);System.out.print(请选择(1-4));int selection scan.nextInt();switch(selection){case 1:System.out.print(要存款的额度为);double addMoney scan.nextDouble();if(addMoney 0){balance addMoney;}break;case 2:System.out.print(要取款的额度为);double minusMoney scan.nextDouble();if(minusMoney 0 balance minusMoney){balance - minusMoney;}else{System.out.println(您输入的数据非法或余额不足);}break;case 3:System.out.println(当前的余额为 balance);break;case 4:System.out.println(欢迎下次进入此系统。^_^);isFlag false;break;default:System.out.println(请重新选择);break; }}while(isFlag);//资源关闭scan.close();}
}
3.3.3 练习
练习1随机生成一个100以内的数猜这个随机数是多少
从键盘输入数如果大了提示大了如果小了提示小了如果对了就不再猜了并统计一共猜了多少次。
import java.util.Scanner;public class DoWhileExer {public static void main(String[] args) {//随机生成一个100以内的整数/*Math.random() [0,1)的小数Math.random()* 100 [0,100)的小数(int)(Math.random()* 100) [0,100)的整数*/int num (int)(Math.random()* 100);//System.out.println(num);//声明一个变量用来存储猜的次数int count 0;Scanner input new Scanner(System.in);int guess;//提升作用域do{System.out.print(请输入100以内的整数);guess input.nextInt();//输入一次就表示猜了一次count;if(guess num){System.out.println(大了);}else if(guess num){System.out.println(小了);}}while(num ! guess);System.out.println(一共猜了 count次);input.close();}
}
3.4 对比三种循环结构 三种循环结构都具有四个要素 循环变量的初始化条件 循环条件 循环体语句块 循环变量的修改的迭代表达式 从循环次数角度分析 do-while循环至少执行一次循环体语句。 for和while循环先判断循环条件语句是否成立然后决定是否执行循环体。 如何选择 遍历有明显的循环次数范围的需求选择for循环 遍历没有明显的循环次数范围的需求选择while循环 如果循环体语句块至少执行一次可以考虑使用do-while循环 本质上三种循环之间完全可以互相转换都能实现循环的功能
3.5 无限循环 3.5.1 基本语法
语法格式 最简单无限循环格式while(true) , for(;;)
适用场景 开发中有时并不确定需要循环多少次需要根据循环体内部某些条件来控制循环的结束使用break。 如果此循环结构不能终止则构成了死循环开发中要避免出现死循环。
3.5.2 应用举例
案例1实现爱你到永远...
public class EndlessFor1 {public static void main(String[] args) {for (;;){System.out.println(我爱你);}
// System.out.println(end);//永远无法到达的语句编译报错}
}
public class EndlessFor2 {public static void main(String[] args) {for (; true;){ //条件永远成立死循环System.out.println(我爱你);}}
}
public class EndlessFor3 {public static void main(String[] args) {for (int i1; i10; ){ //循环变量没有修改条件永远成立死循环System.out.println(我爱你);}}
}
思考如下代码执行效果
public class EndlessFor4 {public static void main(String[] args) {for (int i1; i10; ){ //一次都不执行System.out.println(我爱你);}}
}
案例2从键盘读入个数不确定的整数并判断读入的正数和负数的个数输入为0时结束程序。
import java.util.Scanner;class PositiveNegative {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int positiveNumber 0;//统计正数的个数int negativeNumber 0;//统计负数的个数for(;;){ //while(true){System.out.println(请输入一个整数(输入为0时结束程序));int num scanner.nextInt();if(num 0){positiveNumber;}else if(num 0){negativeNumber;}else{System.out.println(程序结束);break; }}System.out.println(正数的个数为 positiveNumber);System.out.println(负数的个数为 negativeNumber); scanner.close();}
}3.6 嵌套循环或多重循环
3.6.1 使用说明 所谓嵌套循环是指一个循环结构A的循环体是另一个循环结构B。比如for循环里面还有一个for循环就是嵌套循环。其中for ,while ,do-while均可以作为外层循环或内层循环。 外层循环循环结构A 内层循环循环结构B 实质上嵌套循环就是把内层循环当成外层循环的循环体。只有当内层循环的循环条件为false时才会完全跳出内层循环才可结束外层的当次循环开始下一次的外层循环。 设外层循环次数为m次内层为n次则内层循环体实际上需要执行m*n次。 技巧从二维图形的角度看外层循环控制行数内层循环控制列数。 开发经验实际开发中我们最多见到的嵌套循环是两层。一般不会出现超过三层的嵌套循环。如果将要出现一定要停下来重新梳理业务逻辑重新思考算法的实现控制在三层以内。否则可读性会很差。
例如两个for嵌套循环格式
for(初始化语句①; 循环条件语句②; 迭代语句⑦) {for(初始化语句③; 循环条件语句④; 迭代语句⑥) {循环体语句⑤;}
}//执行过程① - ② - ③ - ④ - ⑤ - ⑥ - ④ - ⑤ - ⑥ - ... - ④ - ⑦ - ② - ③ - ④ - ⑤ - ⑥ - ④..
执行特点外层循环执行一次内层循环执行一轮。
3.6.2 应用举例
案例1打印5行6个*
class ForForTest1 {public static void main(String[] args) {/********************************/for(int j 1;j 5;j){for(int i 1;i 6;i){System.out.print(*);}System.out.println();}}
}
案例2打印5行直角三角形
*
**
***
****
*****
public class ForForTest2 {public static void main(String[] args){for (int i 1; i 5; i) {for (int j 1; j i; j) {System.out.print(*);}System.out.println();}}
}
案例3打印5行倒直角三角形
*****
****
***
**
*
public class ForForTest3 {public static void main(String[] args){for(int i 1;i 5;i){for(int j 1;j 6 - i;j){System.out.print(*);}System.out.println();}}
}
案例4打印菱形形状的图案 * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * *
public class ForForTest4 {public static void main(String[] args) {/*上半部分 i m(表示-的个数) n(表示*的个数)关系式2*i m 10 -- m 10 - 2*i--------* 1 8 1 n 2 * i - 1------* * * 2 6 3----* * * * * 3 4 5--* * * * * * * 4 2 7* * * * * * * * * 5 0 9下半部分 i m n 关系式 m 2 * i--* * * * * * * 1 2 7 n 9 - 2 * i----* * * * * 2 4 5------* * * 3 6 3--------* 4 8 1*///上半部分for (int i 1; i 5; i) {//-for (int j 1; j 10 - 2 * i; j) {System.out.print( );}//*for (int k 1; k 2 * i - 1; k) {System.out.print(* );}System.out.println();}//下半部分for (int i 1; i 4; i) {//-for (int j 1; j 2 * i; j) {System.out.print( );}//*for (int k 1; k 9 - 2 * i; k) {System.out.print(* );}System.out.println();}}}
案例5九九乘法表 public class ForForTest5 {public static void main(String[] args) {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();}}
}
3.6.3 练习
练习1将一天中的时间打印到控制台
public class ForForDemo {public static void main (String[] args) {for (int hour 0;hour 24 ;hour ) {for (int min 0; min 60 ; min) {System.out.println(hour 时 min 分);}} }
}
4. 关键字break和continue的使用
4.1 break和continue的说明 适用范围 在循环结构中使用的作用 相同点break switch-case循环结构 一旦执行就结束(或跳出)当前循环结构 此关键字的后面不能声明语句continue 循环结构 一旦执行就结束(或跳出)当次循环结构 此关键字的后面不能声明语句
此外很多语言都有goto语句goto语句可以随意将控制转移到程序中的任意一条语句上然后执行它但使程序容易出错。Java中的break和continue是不同于goto的。
4.2 应用举例
class BreakContinueTest1 {public static void main(String[] args) {for(int i 1;i 10;i){if(i % 4 0){//break;//123continue;//123567910//如下的语句不可能被执行编译不通过//System.out.println(今晚迪丽热巴要约我吃饭);}System.out.print(i);}System.out.println(####);//嵌套循环中的使用for(int i 1;i 4;i){for(int j 1;j 10;j){if(j % 4 0){//break; //结束的是包裹break关键字的最近的一层循环continue;//结束的是包裹break关键字的最近的一层循环的当次}System.out.print(j);}System.out.println();}}
}
4.3 带标签的使用
break语句用于终止某个语句块的执行
{ …… break;……
}break语句出现在多层嵌套的语句块中时可以通过标签指明要终止的是哪一层语句块 label1: { …… label2: { ……label3: { ……break label2;……}}} continue语句出现在多层嵌套的循环语句体中时也可以通过标签指明要跳过的是哪一层循环。 标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。 举例
class BreakContinueTest2 {public static void main(String[] args) {l:for(int i 1;i 4;i){for(int j 1;j 10;j){if(j % 4 0){//break l;continue l;}System.out.print(j);}System.out.println();}}
}
4.4 经典案例
题目找出100以内所有的素数质数100000以内的呢
目的不同的代码的实现方式可以效率差别很大。
分析素数质数只能被1和它本身整除的自然数。 --- 从2开始到这个数-1为止此范围内没有这个数的约数。则此数是一个质数。 比如2、3、5、7、11、13、17、19、23、...
实现方式1
class PrimeNumberTest {public static void main(String[] args) {//boolean isFlag true; //用于标识i是否被除尽过long start System.currentTimeMillis(); //记录当前时间距离1970-1-1 00:00:00的毫秒数int count 0;//记录质数的个数for(int i 2;i 100000;i){ //iboolean isFlag true; //用于标识i是否被除尽过for(int j 2;j i - 1;j){if(i % j 0){ //表明i有约数isFlag false;}}//判断i是否是质数if(isFlag){ //如果isFlag变量没有给修改过值就意味着i没有被j除尽过。则i是一个质数//System.out.println(i);count;}//重置isFlag//isFlag true;}long end System.currentTimeMillis();System.out.println(质数的个数为 count);System.out.println(执行此程序花费的毫秒数为 (end - start)); //16628}
}
实现方式2针对实现方式1进行优化
class PrimeNumberTest1 {public static void main(String[] args) {long start System.currentTimeMillis(); //记录当前时间距离1970-1-1 00:00:00的毫秒数int count 0;//记录质数的个数for(int i 2;i 100000;i){ //iboolean isFlag true; //用于标识i是否被除尽过for(int j 2;j Math.sqrt(i);j){ //优化2将循环条件中的i改为Math.sqrt(i)if(i % j 0){ //表明i有约数isFlag false;break;//优化1主要针对非质数起作用}}//判断i是否是质数if(isFlag){ //如果isFlag变量没有给修改过值就意味着i没有被j除尽过。则i是一个质数//System.out.println(i);count;}}long end System.currentTimeMillis();System.out.println(质数的个数为 count);System.out.println(执行此程序花费的毫秒数为 (end - start));//1062}
}
实现方式3选做使用continue 标签
class PrimeNumberTest2 {public static void main(String[] args) {long start System.currentTimeMillis(); //记录当前时间距离1970-1-1 00:00:00的毫秒数int count 0;//记录质数的个数label:for(int i 2;i 100000;i){ //ifor(int j 2;j Math.sqrt(i);j){ //优化2将循环条件中的i改为Math.sqrt(i)if(i % j 0){ //表明i有约数continue label;}}//一旦程序能执行到此位置说明i就是一个质数System.out.println(i);count;}long end System.currentTimeMillis();System.out.println(质数的个数为 count);System.out.println(执行此程序花费的毫秒数为 (end - start));//1062}
}
4.5 练习
练习1
生成 1-100 之间的随机数直到生成了 97 这个数看看一共用了几次提示使用 (int)(Math.random() * 100) 1
public class NumberGuessTest {public static void main(String[] args) {int count 0;//记录循环的次数或生成随机数进行比较的次数while(true){int random (int)(Math.random() * 100) 1;count;if(random 97){break;}}System.out.println(直到生成随机数97一共比较了 count 次);}
}
5. Scanner键盘输入功能的实现 如何从键盘获取不同类型基本数据类型、String类型的变量使用Scanner类。 键盘输入代码的四个步骤 导包import java.util.Scanner; 创建Scanner类型的对象Scanner scan new Scanner(System.in); 调用Scanner类的相关方法next() / nextXxx()来获取指定类型的变量 释放资源scan.close(); 注意需要根据相应的方法来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时会报异常 导致程序终止。
5.1 各种类型的数据输入
案例小明注册某交友网站要求录入个人相关信息。如下
请输入你的网名、你的年龄、你的体重、你是否单身、你的性别等情况。
//① 导包
import java.util.Scanner;public class ScannerTest1 {public static void main(String[] args) {//② 创建Scanner的对象//Scanner是一个引用数据类型它的全名称是java.util.Scanner//scanner就是一个引用数据类型的变量了赋给它的值是一个对象对象的概念我们后面学习暂时先这么叫//new Scanner(System.in)是一个new表达式该表达式的结果是一个对象//引用数据类型 变量 对象;//这个等式的意思可以理解为用一个引用数据类型的变量代表一个对象所以这个变量的名称又称为对象名//我们也把scanner变量叫做scanner对象Scanner scanner new Scanner(System.in);//System.in默认代表键盘输入//③根据提示调用Scanner的方法获取不同类型的变量System.out.println(欢迎光临你好我好交友网站);System.out.print(请输入你的网名);String name scanner.next();System.out.print(请输入你的年龄);int age scanner.nextInt();System.out.print(请输入你的体重);double weight scanner.nextDouble();System.out.print(你是否单身true/false));boolean isSingle scanner.nextBoolean();System.out.print(请输入你的性别);char gender scanner.next().charAt(0);//先按照字符串接收然后再取字符串的第一个字符下标为0System.out.println(你的基本情况如下);System.out.println(网名 name \n年龄 age \n体重 weight \n单身 isSingle \n性别 gender);//④ 关闭资源scanner.close();}
}
5.2 练习
练习1
大家都知道男大当婚女大当嫁。那么女方家长要嫁女儿当然要提出一定的条件高180cm以上富财富1千万以上帅是。如果这三个条件同时满足则“我一定要嫁给他!!!”
如果三个条件有为真的情况则“嫁吧比上不足比下有余。”
如果三个条件都不满足则“不嫁”提示
System.out.println(“身高: (cm));
scanner.nextInt();System.out.println(“财富: (千万));
scanner.nextDouble();System.out.println(“帅否: (true/false));
scanner.nextBoolean(); System.out.println(“帅否: (是/否));
scanner.next(); 是.equals(str)
import java.util.Scanner;class ScannerExer1 {public static void main(String[] args) {Scanner scan new Scanner(System.in);System.out.println(请输入你的身高(cm));int height scan.nextInt();System.out.println(请输入你的财富(以千万为单位));double wealth scan.nextDouble();/*方式1关于是否帅问题我们使用boolean类型接收System.out.println(帅否(true/false));boolean isHandsome scan.nextBoolean();//判断if(height 180 wealth 1.0 isHandsome){ //不建议isHandsome trueSystem.out.println(我一定要嫁给他!!!);}else if(height 180 || wealth 1.0 || isHandsome){System.out.println(嫁吧比上不足比下有余。);}else{System.out.println(不嫁);}*///方式2关于是否帅问题我们使用String类型接收System.out.println(帅否(是/否));String isHandsome scan.next();//判断if(height 180 wealth 1.0 isHandsome 是){ //知识点判断两个字符串是否相等使用String的equals()System.out.println(我一定要嫁给他!!!);}else if(height 180 || wealth 1.0 || isHandsome 是){System.out.println(嫁吧比上不足比下有余。);}else{System.out.println(不嫁);}//关闭资源scan.close();}
}
练习2
我家的狗5岁了5岁的狗相当于人类多大呢其实狗的前两年每一年相当于人类的10.5岁之后每增加一年就增加四岁。那么5岁的狗相当于人类多少年龄呢应该是10.5 10.5 4 4 4 33岁。编写一个程序获取用户输入的狗的年龄通过程序显示其相当于人类的年龄。如果用户输入负数请显示一个提示信息。import java.util.Scanner;class ScannerExer2 {public static void main(String[] args) {Scanner scan new Scanner(System.in);System.out.println(请输入狗狗的年龄);int dogAge scan.nextInt();//通过分支语句判断狗狗相当于人的年龄if(dogAge 0){System.out.println(你输入的狗狗的年龄不合法);}else if(dogAge 2){System.out.println(相当于人的年龄 (dogAge * 10.5));}else{System.out.println(相当于人的年龄 (2 * 10.5 (dogAge - 2) * 4));}//关闭资源scan.close();}
}
6. 如何获取一个随机数
如何产生一个指定范围的随机整数
1、Math类的random()的调用会返回一个[0,1)范围的一个double型值
2、Math.random() * 100 --- [0,100) (int)(Math.random() * 100) --- [0,99] (int)(Math.random() * 100) 5 ---- [5,104]
3、如何获取[a,b]范围内的随机整数呢(int)(Math.random() * (b - a 1)) a
4、举例
class MathRandomTest {public static void main(String[] args) {double value Math.random();System.out.println(value);//[1,6]int number (int)(Math.random() * 6) 1; //System.out.println(number);}
}