1. 选择结构、循环结构
为什么要学习选择结构和循环结构?
生活中存在多种分支选择的情况,也存在多种循环的情况,为了解决这类问题,需要引人选择结构和循环结构。比方说打印100份试卷,没有打到100份之前,需要继续打印这个动作,直到100份为止。比方小明考试,如果考到第1名,父母奖励1台笔记本,考到第2名,奖励1个mp3,如果是第3名,奖励1本参考书,其他的奖励巴掌。
1.1. 基本if else语句
我考试考了61分
如果 我及格了 老师就会表扬我
如果 我及格了
老师就会表扬我
否则
老师批评我
语法:
If(条件){
//语句,条件为真,执行此处的语句
}else{
//条件为假,执行else分支里的语句
}
注意:
课堂练习:
提示在控制台输入一个1~100的分数,如果输入的分数大于等于60,输出你及格了,否则输出你没及格。
Scanner input = new Scanner(System.in);
System.out.print("请输入你的考试分数:");
int score = input.nextInt();
if(score>=60){
System.out.println("及格了");
}else{
System.out.println("不及格");
}
需求:如果用户输入的字符串中包含“竟然敢”,输出“再也不敢了”
分析: 没有说不包含的时候,如何处理,所以if就可以搞定,不需要写else
String str = input.next();
if(str.contains("竟然敢")){
System.out.println("再也不敢了");
}
课堂练习:
如果用户说“你会做什么?”或者“你能做什么?”或者“你有什么功能?”或者“你的功能是什么?”
在控制台输出“我的特意功能就是什么都不会”
分析: if(str.contains(“做什么”) || str.contains(“功能”)){
}
1.2. 复杂条件的if else语句
需求:小明语文考了70分,数学考了100分,如果两门成绩都及格,输出“哎哟,不错哟
分析: 2个变量 ChineseScore,mathScore
chineseScore>=60 && mathScore>=60
需求:小明语文考了70分,数学考了100分,如果两门成绩都及格,同时只要有一门是满分,输出下一次考试免考。
分析:条件1: 2门都及格 条件2:只要有1门是满分 ,至于是哪一门是满分,都有可能,可以是数学满分或者语文满分,或者2个都满分
条件1,条件2 是什么关系
(chineseScore>=60 && mathScore>=60 ) && (chineseScore==100 || mathScore==100)
课堂练习:
需求:小明语文考了70分,数学考了100分,只要有一门成绩超过90,另一门成绩就算没有及格,但是只要超过30分,可以不用补考,输出“你逃过一劫”,否则输出“你要补考”。
分析:情况1 数学超过90,语文必须超过30 ; 情况2 语文超过90,数学必须超过30 ,情况1,情况2 或的关系
(mathScore>90 && chineseScore>30 ) || (chineseScore>90 && mathScore>30) ||隐含条件
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//接收2门功课的成绩
System.out.print("请输入语文的成绩:");
int chineseScore = input.nextInt();
System.out.print("请输入数学的成绩:");
int mathScore = input.nextInt();
//练习1:
/*if(chineseScore>=60 && mathScore>=60){
System.out.println("哎呦,不错哦");
}*/
//练习2:
/*if((mathScore>=60 && chineseScore>=60) && (mathScore==100 || chineseScore==100)){
System.out.println("下一次免考");
}*/
//练习3
if((chineseScore>90 && mathScore>30) || (mathScore>90 && chineseScore>30) || (mathScore>=60 && chineseScore>=60)){
System.out.println("你逃过一劫");
}else{
System.out.println("你要补考");
}
}
1.3. 多重if else语句
需求:在控制台输入一个成绩,80分以上输出优秀,70分以上输出良好,60分以上输出及格,60分以下输出再接再厉。
例题1:
/**
* 在控制台输入一个成绩,80分及80分以上输出优秀,70分及70分以上输出良好,60分及60分以上输出及格,60分以下输出再接再厉。
* @author Administrator
*
*/
public class Test03 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入你的考试成绩:");
int score = input.nextInt();
//[80,100], [70,80), [60,70) ,[0,60)
if(score>=80){
System.out.println("优秀");
}else if(score>=70){
System.out.println("良好");
}else if(score>=60){
System.out.println("及格");
}else /*if(score<60)*/{
System.out.println("再接再厉");
}
}
}
多重if else语句语法:
If(条件1){
//执行语句1
}else if(条件2){
//执行语句2
}else if(条件3){
//语句3
}
…..
else{
//以上条件都不满足时执行的是else里面的操作
}
If有1个 ,else if 有多个 else 有1个 ,而且 else是可以省略的。
多重if else语句和连续if语句的区别
连续if,符合条件的分支会被执行,即使1个分支被执行了,剩余的其他分支仍旧会判断。
总结:多重if,有多个分支,但是只会执行其中一个分支,一旦一个分支执行了,剩余的其余分支不用再判断,范围从小往大写,或者从大往小写,都可以 ,但是一旦逻辑顺序(else if顺序)调整了,那么你必须把逻辑条件写完整,避免出错。
课堂练习:
从控制台接收输入一个存款数额,如果超过1000万元,输出买房子,超过100万,输出买兰博基尼,超过10万,输出买拉菲,超过1万,输出买单反,超过1000,输出买衣服,否则输出买烧饼。
//方式1: 从大往小
public class Test04 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入你的存款金额(单位:万元):");
double money = input.nextDouble();
if(money>1000){
System.out.println("买大房子");
}else if(money>100){
System.out.println("买兰博基尼");
}else if(money>10){
System.out.println("买拉菲");
}else if(money>1){
System.out.println("买单反");
}else if(money>0.1){
System.out.println("买衣服");
}else{
System.out.println("买烧饼");
}
}
}
//方式2:打乱顺序
public class Test042 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入你的存款金额(单位:万元):");
double money = input.nextDouble();
if(money>1000){
System.out.println("买大房子");
}else if(money>1 && money<=10){
System.out.println("买单反");
}else if(money>10 && money<=100){
System.out.println("买拉菲");
}else if(money>100 && money<=1000){
System.out.println("买兰博基尼");
}else if(money>0.1 && money<=1){
System.out.println("买衣服");
}else{
System.out.println("买烧饼");
}
}
}
//方式3:从小往大
public class Test043 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入你的存款金额(单位:万元):");
double money = input.nextDouble();
if(money<=0.1){
System.out.println("买烧饼");
}else if(money<=1){
System.out.println("买衣服");
}else if(money<=10){
System.out.println("买单反");
}else if(money<=100){
System.out.println("买拉菲");
}else if(money<=1000){
System.out.println("买兰博基尼");
}else{
System.out.println("买大房子");
}
}
}
1.4. 嵌套if else语句
需求:跑步比赛。接收一个时间,如果10秒以内进决赛,分男女组再比。
分析:外围的条件能否进决赛 ,只有小于等于10秒才能进入决赛 ,超出10秒,不能进决赛。在进决赛的这帮人里,按性别分组。
/**
* 嵌套if-else -1
* 判断字符串是否相等 equals()
* 不区分大小写的判断 equalsIgnoreCase()
* @author Administrator
*
*/
public class Test05 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入你的跑步时间:");
double time = input.nextDouble();
//判断能否进决赛
if(time<=10){
System.out.println("恭喜,进入决赛");
System.out.print("请输入性别:");
//字符串
String sex = input.next();
//按性别分组
if(sex.equals("女")){
System.out.println("分到女子组");
}else{
System.out.println("分到男子组");
}
}else{
System.out.println("遗憾,没有进决赛");
}
}
}
语法:
If(外层条件){
If(内层条件){
}else{
}
}else{
If(内层条件){
}else{
}
}
课堂练习:
电梯系统。电梯最多可容纳12人。在控制台输入一个数字表示等候的人数,如果超过12人,输出还需要几趟才能接走剩下的人数,如果没有超过12人,输出“已经接走所有人” 。写完以后,自己分别输入24或25测试结果是否正确。
分析: 电梯默认已经开了一趟了,如果输入的是24,输出“还需要1趟”,如果输入的是25,输出 “还需要2趟”,输入的是9 输出 “已经接走所有人”
外层条件是判断是否 大于12 ,假设没有考虑默认已经开了一趟 ,总的趟数 = n%12 >0 n/12+1 n%12==0 n/12
已经开了一趟 还需要的趟数 = n%12>0 n/12+1-1 = n/12 , n%2==0 n/12-1
If(n>12){
If(n%12>0){
// n/12
}else{
// n/12-1
}
}else{
//已经接走了所有人
}
/**
* if永远和离自己最近的else配对
* @author Administrator
*
*/
public class Test06 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入乘坐电梯的人数:");
int n = input.nextInt();
if(n>12){
if(n%12>0){
System.out.println("还需要的趟数:"+n/12);
}else{
System.out.println("还需要的趟数:"+(n/12-1));
}
}else{
System.out.println("已经接走了所有的人");
}
}
}
注意: equals() 用于比较字符串内容是否相等,(java.lang.String 类重写了equals()方法) “==” 用于基本数据类型的比较,比较的是基本数据类型的值 ,“==”用于引用数据类型比较,比较的是引用数据类型的内存地址。
1.5. switch语句
需求1:游戏根据不同的名次,输出不同的奖品名称。
从if…elseif语句改为switch
方式1:
public class Test01 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入游戏的名次:");
int mingci = input.nextInt();
if(mingci == 1){
System.out.println("奖励笔记本电脑");
}else if(mingci == 2){
System.out.println("奖励mp3");
}else if(mingci == 3){
System.out.println("奖励一本参考书");
}else{
System.out.println("奖励一个巴掌");
}
}
}
方式2:
public class Test02 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入游戏的名次:");
int mingci = input.nextInt();
switch(mingci){
case 1:
System.out.println("奖励笔记本电脑");
break;
case 2:
System.out.println("奖励mp3");
break;
case 3:
System.out.println("奖励一本参考书");
break;
default:
System.out.println("奖励一个巴掌");
break;
}
}
}
例题2关于switch后的值的类型:
public class Test022 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入游戏的名次:");
//byte mingci = input.nextByte();
//short mingci = input.nextShort();
//int mingci = input.nextInt();
/*switch(mingci){
case 1:
System.out.println("奖励笔记本电脑");
break;
case 2:
System.out.println("奖励mp3");
break;
case 3:
System.out.println("奖励一本参考书");
break;
default:
System.out.println("奖励一个巴掌");
break;
}*/
String strMingci = input.next();
//将接收的字符串strMingci取索引为0 的位置的字符
char mingci = strMingci.charAt(0);
switch(mingci){
case 'A':
System.out.println("奖励笔记本电脑");
break;
case 'B':
System.out.println("奖励mp3");
break;
case 'C':
System.out.println("奖励一本参考书");
break;
default:
System.out.println("奖励一个巴掌");
break;
}
//JDK1.7之后,switch(值的类型支持字符串String)
/*switch(strMingci){
case "A":
System.out.println("奖励笔记本电脑");
break;
case "B":
System.out.println("奖励mp3");
break;
case "C":
System.out.println("奖励一本参考书");
break;
default:
System.out.println("奖励一个巴掌");
break;
}*/
}
}
需求2:用switch完成,在控制台输入一个成绩,80分以上输出优秀,70分以上输出良好,60分以上输出及格,60分以下输出再接再厉。
public class Test03 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入你的考试成绩:");
int score = input.nextInt();
//80--89 8 90--99 9 100 10
switch(score/10){
case 10:
case 9:
case 8:
System.out.println("优秀");
break;
case 7:
System.out.println("良好");
break;
case 6:
System.out.println("及格");
default:
System.out.println("不及格,再接再厉");
break;
}
}
}
语法:
Switch(具体的值){
case 值1:
语句1
break;
case 值2:
语句2
break;
case 值3:
语句3
break;
…….
default:
//以上case都没有符合条件的,执行default里的代码
break;
}
注意:switch(值) 值的类型: byte,short,int ,char, 枚举类型, jdk1.7之后,支持String
值和下方的哪个case相等,就会执行里面相应的语句,只会执行1个分支,如果和所有的case后的值都不符合,那么会执行default 。
Default代码块是可省略的,不建议省。Default后的break,不建议省,如果default 在 switch的最后 ,break可以省略,不会造成影响,一旦default调整位置了,没有break,会出现错误的结果。
每个case后的break不能省略,否则会出现执行多个case的情况(穿透)。
总结:
什么时候使用switch?什么时候使用多重if语句?
等值判断的时候用switch,连续区间用多重if
1.6. if..else嵌套switch
问题:如果用户没有输入数字会怎么样?
会出现java.util.InputMismatchException 输入类型不匹配异常
为了使程序更加健壮,我们在编码时,要考虑可能出现的问题,并且在程序中做出相应的判断,给用户一个友好的提示。
If(input.hasNextInt()){ //输入的整数
…..
//只有是整数的时候,才会接收 ,接收变量的值,放在if的里面
Int score -= input.nextInt();
}else{
//你输入的数字不是整数,输入非法
}
提示: boolean hasNextInt() 该方法,如果输入的值是整数int类型的,返回值true,否则false
课堂练习:
常州嬉戏谷门票单人140元,穿情侣装双人130元,三人票价是单人票价的三倍,超过3人算团体票打八折。用户在控制台输入1,输出140元;用户输入2,输出130元;用户输入3,输出140x3的结果;其余情况按八折计算。用户输入汉字,输出“输入非法,请输入正确的数字”。
分析: 声明变量double sum = 0; 用来存储总金额 输入人数 int count = input.nextInt();
Switch(count){
Case 1:
Sum = 140;
Break;
Case 2:
……
}
//打印总的票价
public class Test04 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//声明变量,用于累加总金额
double sum = 0;
System.out.print("请输入参观人数:");
if(input.hasNextInt()){
//整数的处理
int count = input.nextInt();
switch(count){
case 1:
sum = 140;
break;
case 2:
sum = 130;
break;
case 3:
sum = 140*3;
break;
default:
sum = 140*count*0.8;
break;
}
System.out.println("总票价为:"+sum);
}else{
System.out.println("输入非法字符,请输入整数");
}
}
}
1.7. 为什么要使用循环?
需求1:如何在控制台输出100行好好学习,天天向上
分析: 100临界条件 i= 1; i<=100 , 符合这个条件(循环条件为真),就要继续循环 循环条件 做的事情: 打印输出“好好学习” 循环操作 循环变量如何变化 循环何时退出
需求2:在控制台输出100行好好学习,天天向上,同时记录当前是多少遍输出。
1.8. while循环
语法:
while(循环条件){
//执行的语句
}
特点:先判断,后执行。如果条件不满足,一次都不会被执行。如果条件被满足,一直执行到不满足为止。
需求:打印20~100之间所有的偶数
public class Test05 {
public static void main(String[] args) {
int a=20;
while(a<=100){
System.out.println(a);
a=a+2;
}
}
}
需求:使用while让控制台能够循环接收输入
public class TestWhile02 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while(true){
System.out.println("请输入:");
String str = input.next();
System.out.println("你输入的是:"+str);
}
}
}
需求:使用while循环打印1~9,遇到5时不打印。
方式1:
public class ZuoYe1 {
public static void main(String[] args) {
int i = 1;
while (i <= 9) {
if (i == 5) {
i++;
} else {
System.out.println(i);
i++;
}
}
}
}
方式2:
public class ZuoYe12 {
public static void main(String[] args) {
int i = 1;
while (i <= 9) {
if(i!=5){
System.out.println(i);
}
i++;
}
}
}
方式3:
public class ZuoYe13 {
public static void main(String[] args) {
int i = 1;
while (i <= 9) {
if(i==5){
i++;
continue;
}
System.out.println(i);
i++;
}
}
}
例题2:break的作用
public class TestWhile03 {
public static void main(String[] args) {
int i=1;
while(i<=100){
if(i==5){
break;
}
System.out.println(i);
i++;
}
}
}
总结:
Continue :结束的本次循环,继续回到循环条件判断处,(for先执行循环变量的增,减等操作),再判断条件是否满足,如果满足,继续下一次循环。
Break: 退出当前循环(整个循环都会结束)
while循环结束的两种方式
While使用流程
(1) 分析循环条件,循环操作 ,看循环做什么事情
(2) 套用while/do-while/for语法写代码
(3) 检出循环能否安全退出(循环变量的值发生变化)
课堂练习:
如果用户在控制台输入“你好”,输出“你好,在啊?”
如果用户在控制台输入“在啊”,输出“在做什么?”
要求:以上内容可以重复,而不是输入完两句话就退出程序,当用户输入“拜拜”,程序才退出。
public class TestWhile04 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while(true){
//接收输入
System.out.println("请输入:");
String str = input.next();
//对接收的内容 做判断
if(str.contains("你好")){
System.out.println("你好在啊");
}else if(str.contains("在啊")){
System.out.println("在做什么?");
}else if(str.contains("拜拜")){
System.out.println("你已选择退出");
break;
}
}
}
}
1.9. do..while循环
语法:
do{
//循环语句
}while(循环条件);
特点:先执行,后判断。如果while右侧的条件不满足,代码至少会被执行一次
while和do…while的区别:
执行顺序: while 先判断 ,再执行 do-while 先执行 再判断
语法区别:
执行次数: while 循环条件不满足,一次都不会执行 。do-while 即使条件不满足,至少会执行一次
1.10. 调试
什么时候需要调试?
(1)程序发生错误或者程序的输出结果和预想结果不一致时。
(2)程序出问题(非编译问题)
(3)学习别人的代码
调试(DEBUG)步骤:
1设置断点 (双击行号的左侧 ,取消断点,也是双击行号的左侧),在哪个地方添加断点呢?在程序容易出问题的地方。
2.启动调试 (空白处右击—Debug as----java Application 或者直接点击菜单栏的“小虫子一样的图标”) F5 单步跳入(跳入方法内部, 逐过程的) ,F6 单步跳过(逐语句的) ,F8 从一个断点 切换到另外一个断点,两个断点之间可能相差多条语句。 Ctrl+ F2 停止调试
3.观察变量值的变化 在Variables 里观看 或者 把光标定位到变量上 观察 ,或者 选中该变量 右击 watch –Expressions 中查看 ,找出问题
4.修改问题 。
1.11. for循环
需求:使用while在控制台输出100行好好学习,天天向上
改为for循环:
for循环语法:
for(声明变量;执行条件;更新变量){
//循环执行的代码
}
方式1:
public class TestFor01 {
public static void main(String[] args) {
//变量的声明部分,可以是1个或多个变量的初始化;循环条件; 循环变量的值变化,自增,自减
//3块都可以省略,但是 2个分号不能省略
for(int i=1;i<=100;i++){
System.out.println("第"+i+"遍好好学习,天天向上");
}
}
}
方式2:
public class TestFor012 {
public static void main(String[] args) {
//变量的声明部分,可以是1个或多个变量的初始化;循环条件; 循环变量的值变化,自增,自减
//3块都可以省略,但是 2个分号不能省略
for(int i=1;i<=100;){
System.out.println("第"+i+"遍好好学习,天天向上");
i++;
}
}
}
方式3:
public class TestFor013 {
public static void main(String[] args) {
//变量的声明部分,可以是1个或多个变量的初始化;循环条件; 循环变量的值变化,自增,自减
//3块都可以省略,但是 2个分号不能省略
int i=1;
for(;i<=100;){
System.out.println("第"+i+"遍好好学习,天天向上");
i++;
}
}
}
方式4:
public class TestFor014 {
public static void main(String[] args) {
//变量的声明部分,可以是1个或多个变量的初始化;循环条件; 循环变量的值变化,自增,自减
//3块都可以省略,但是 2个分号不能省略
int i=1;
for(;;){
if(i<=100){
System.out.println("第"+i+"遍好好学习,天天向上");
}else{
break;
}
i++;
}
}
}
执行顺序:
循环变量的初始化-à判断循环条件是否满足---à如果满足,执行循环语句,语句执行完后------à,循环变量的变化(可能是自增,自减)---à再去判断条件是否满足,满足继续循环
注意:
需求:使用for循环在控制台输出26~34的数字。
需求:使用for循环接收三个数字,并计算平均值。
Scanner input = new Scanner(System.in);
//声明 2个变量,用于存储累加的和,用于接收输入的数字
Double sum = 0,double num = 0;
For(int i=1;i<=3;i++){
Syso// i+”个数字:”
Num = input.nextDouble();
Sum +=num;
}
//循环结束的时候 sum/3;
public class TestFor03 {
public static void main(String[] args) {
Scanner input= new Scanner(System.in);
//声明2个变量
double sum=0;
for(int i=1;i<=3;i++){
System.out.print("请输入第"+i+"个数:");
//接收的时候,直接累加到sum
sum += input.nextDouble();
}
//计算均值
System.out.println("3个数的平均值为:"+ Math.round(sum/3 *100)/100.0);
}
}
需求:循环输入一个同学5门课程的成绩,并计算平均分。
分析: 接收 姓名 String name 过程和上题类似
For(){
}
public class TestFor04 {
public static void main(String[] args) {
Scanner input= new Scanner(System.in);
//声明double sum 用来累加和
double sum = 0;
System.out.print("请输入学生姓名:");
String name = input.next();
for(int i=1;i<6;i++){ //i=1---5 有5个
System.out.print("请输入5门功课中第"+i+"门功课的成绩:");
sum += input.nextDouble();
}
//计算均值
System.out.println(name+"的5门功课的平均分为为:"+ new DecimalFormat("#.00").format(sum/5));
}
}
需求:在控制台输出以下加法表
0 + 6 = 6
1 + 5 = 6
2 + 4 = 6
3 + 3 = 6
4 + 2 = 6
5 + 1 = 6
6 + 0 = 6
//方式1
For(int i=0;i<=6;i++){
// i+ “+”+ (6-i)+”=”+6
}
//或者方式2
For(int i=0,j = 6;i<=6;i++,j--){
// i+”+”+j+”=”+(i+j)
}
public class TestFor05 {
public static void main(String[] args) {
Scanner input= new Scanner(System.in);
System.out.println("请输入加法表达式中要累加的和:");
int n = input.nextInt();
//1个变量控制
for(int i=0;i<=n;i++){
System.out.println(i+"+"+(n-i)+"="+n);
}
System.out.println("===============\n");
for(int i=0,j=n;i<=n;i++,j--){
System.out.println(i+"+"+j+"="+(i+j));
}
}
}
需求:声明两个变量,分别保存用户名admin和密码123456。在控制台分别接收用户输入最多三次用户名和密码,如果正确提示“欢迎使用此高大尚系统”,如果失败提示还剩几次机会,超过三次提示“账户锁定”。
分析:2个变量 String username ,String pwd ,已经有用户名,密码 ,存储在2个变量中,利用for循环 接收新的变量的值和密码和已有的做比较,看是否相等,如果等,提示欢迎,如果不等,最多有3次输入的机会
前2次输错的话,提示剩余机会,最后一次输错,提示账户锁定。
For(int i=1;i<=3;i++){
//接收新的用户名,密码
//做比对 ,正确的话退出循环
//如果错误的话,提示剩余机会
//如果是最后一次输错,提示账户锁定
}
public class TestFor06 {
public static void main(String[] args) {
//已有2个变量,存储正确的用户名,密码
String userName = "admin",pwd = "123456";
//通过循环控制输入的次数
Scanner input = new Scanner(System.in);
//在循环外声明2个变量,用于接收用户名,密码
String reUserName,rePwd;
for(int i=1;i<=3;i++){
//接收用户名,密码
System.out.print("请输入要登录的用户名:");
reUserName = input.next();
System.out.print("请输入要登录的密码:");
rePwd = input.next();
//比对
if(userName.equals(reUserName) && pwd.equals(rePwd)){
System.out.println("欢迎使用次高达上");
//接收完后,直接比对,只要用户名,密码匹配,就退出
break;
}else if(i<3){ //i = 1,2
System.out.println("输入错误,你还剩余"+(3-i)+"次机会");
}else{// i=3
System.out.println("3次输错,账户锁定");
}
}
}
}
1.12. 随机数
随机整数 :
//方式1:
[min max]
static double | random() |
(int)(Math.random()*(max-min+1) ) +min
//方式2:
int | nextInt(int n) |
[0,n)
Random ra = new Random(); //记着要导包 import java.util.Random ;
ra.nextInt(max-min+1) +min;
//方式3:
int | nextInt() |
ra.nextInt() 返回1个在 -2的31次方 到 2的31次方-1 范围内的一个整数
Random ra = new Random(); //记着要导包 import java.util.Random ;
Math.abs(ra.nextInt()%(max-min+1))+min
[min ,max)
//方式1:
(int)(Math.random()*(max-min) ) +min
//方式2
Random ra = new Random(); //记着要导包 import java.util.Random ;
ra.nextInt(max-min) +min;
//方式3:
Random ra = new Random(); //记着要导包 import java.util.Random ;
Math.abs(ra.nextInt()%(max-min))+min
随机小数:
double | nextDouble() |
[0.0,1.0)
[min max)
Random ra = new Random();
ra.nextDouble()*(max-min)+min
[1.0, 2.5)
public class Test07 {
public static void main(String[] args) {
Random ra = new Random();
//[1.0,2.5)
for(int i=0;i<50;i++){ //[0,49]
//[0.0,1.0) ---> [0.0,1.5)---->[1.0,2.5)
double num = ra.nextDouble()*1.5+1.0;
System.out.println(num);
}
}
}
需求:使用while随机生成50个0~9随机数 [0,9]
for(int i=1;i<=50;i++){
int num = (int)(Math.random()*10);
System.out.println(num);
}
//方式2
Random ra = new Random();
//[0,9] [0,10 )
for(int i=1;i<=50;i++){
int num = ra.nextInt(10);
System.out.println(num);
}
//方式3
Random ra = new Random();
for(int i=1;i<=50;i++){
int num = ra.nextInt();
int num2 = Math.abs(num%10);
System.out.println(num2);
}
例题举例:
/**
* [min,max]
* (int)(Math.random()*(max-min+1) ) +min
*
* ra.nextInt(max-min+1) +min;
* @author Administrator
*
*/
public class Test01 {
public static void main(String[] args) {
Random ra = new Random();
//[0,9] [0,10 )
// [-3,19] [-18,-3] [21,59]
for(int i=1;i<=50;i++){
//int num = (int)(Math.random()*10);
//[-3,19] Math.random()-->[0,1.0) Math.random()*23--> [0,23.0)-3---> [-3,20)--> [-3,19]
//int num = (int)(Math.random()*23)-3;
//int num = ra.nextInt(10);
// ra.nextInt(23)--->[0,23) -3 ---->[-3, 20)--->[-3,19]
int num = ra.nextInt(23)-3;
System.out.println(num);
}
}
}
import java.util.Random;
/**
* Math.abs() 计算绝对值 [min,max]
* Math.abs(ra.nextInt()%(max-min+1))+min
* @author Administrator
*
*/
public class Test04 {
public static void main(String[] args) {
//System.out.println(Math.abs(-3.5));
Random ra = new Random();
//[-3,19] [-18,-3] [21,59]
for(int i=1;i<=500;i++){
int num = ra.nextInt();
// 19 -(-3) +1 = 23 Math.abs(num%23)--->[0,22] -3 --->[-3,19]
//int num2 = Math.abs(num%(23))-3;
// -3 - (-18)+1 = 16 Math.abs(num%16)--->[0,15] - 18 ---->[-18,-3]
//int num2 = Math.abs(num%16)-18;
// 59-21+1=39 Math.abs(num%39)--->[0,38] +21 ---->[21,59]
int num2 = Math.abs(num%39)+21;
System.out.println(num2);
}
}
}
课堂练习:
(1)使用for随机生成50个0~9随机整数
(2)生成一个数(该数的随机范围是【13,250】)如100或者210,使用for循环计算5~该数字所有奇数的和。。
For(int i=5;i<=num;i++){
If(i%2==0){
Continue;
}
Sum +=I;
}
//打印sum
public class Test053 {
public static void main(String[] args) {
//生成随机数
int num = (int)(Math.random()*238)+13;
System.out.println("生成的随机数为:"+num);
//声明变量,存储和
int sum = 0;
for(int i=5;i<=num;i++){
if(i%2==0){
continue;
}
sum+=i;
}
System.out.println("该范围内的所有的奇数和为:"+sum);
}
}
(4) 随机生成400~900以内的整数,计算该数字~0所有偶数的和。
public class Test06 {
public static void main(String[] args) {
Random ra = new Random();
//[0,501) +400 [400,901)----[400,900]
int num = ra.nextInt(501)+400;
System.out.println("生成的随机数为:"+num);
//sum用于累加和
int sum = 0;
for(int i=0;i<=num;i+=2){
sum +=i;
}
System.out.println("0到"+num+"的所有偶数之和为:"+sum);
}
}
1.13. 作业
(1)03.选择结构、循环结构.doc
(2)人机对话。实现以下对话:
用户:你好
电脑:你好,在啊?
用户:在啊
电脑:你在做什么?
用户:我在吃饭/我在听歌/我在学习
电脑:饭好香/真好听/加油哟!
用户:你会做什么/你能做什么/你有什么功能/你的功能是什么
电脑:我的特意功能就是什么都不会
用户不说拜拜,程序不可以退出。
(3)购物系统。在控制台输出以下菜单后,等待用户输入。
如果输入1(登录系统),输出系统登录后的购物菜单(第一天作业内容):
如果输入2,输出“谢谢使用!”
输入汉字或其他字符如“s”,都输出“请输入正确的数字!“
(4)在显示以下菜单时,
输入2(购物结算),在控制台输出以下信息:
输入商品编号后,询问用户要购买的数量。
输入购买数量后,同时显示出购买的商品名称和购买的数量,要求用户输入(Y/N)确认订单,如果用户输入Y,输出应付总金额。如果输入N,再次要求用户输入商品编号重新来。
扩展作业:
在实现以上功能的基础上,能够让用户自行选择是否退出购买系统,如果退出,要打印商品的列表,以及所有商品的总价,另外在每次购买商品时,都需要让用户确认订单,
,都需要确认用户是否继续购买?
实现功能截图如下: