选择结构、循环结构


1. 选择结构、循环结构

为什么学习选择结构循环结构?

生活中存在多种分支选择的情况,也存在多种循环的情况,为了解决这类问题,需要引人选择结构和循环结构。比方说打印100份试卷,没有打到100份之前,需要继续打印这个动作,直到100份为止。比方小明考试,如果考到第1名,父母奖励1台笔记本,考到第2名,奖励1mp3,如果是第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里面的操作

 

}

If1个  ,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,输出已经接走所有” 。写完以后,自己分别输入2425测试结果是否正确。

分析: 电梯默认已经开了一趟了,如果输入的是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++;

}

}

}

例题2break的作用

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右侧的条件不满足,代码至少会被执行一次

whiledo…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() 
          返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。

 

(int)(Math.random()*(max-min+1) )  +min

//方式2

 int

nextInt(int n) 
          返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。

  [0n

 Random ra = new Random();   //记着要导包  import java.util.Random ;

   ra.nextInt(max-min+1) +min;

//方式3

 int

nextInt() 
          返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。

ra.nextInt() 返回1个在 -231次方 到 231次方-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 之间均匀分布的 double 值。

[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随机生成500~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.0Math.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随机生成500~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. 作业

103.选择结构、循环结构.doc

2)人机对话。实现以下对话

用户你好

电脑你好,在啊?

用户

电脑:你在做什么?

用户在吃饭/在听歌/学习

电脑饭好香/真好听/加油哟!

用户你会做什么/你能做什么/你有什么功能/你的功能是什么

电脑我的特意功能就是什么都不会

用户不说拜拜,程序不可以退出。

3)购物系统。控制台输出以下菜单后,等待用户输入。

 

如果输入1(登录系统),输出系统登录后的购物菜单第一天作业内容)

 

如果输入2,输出“谢谢使用!

输入汉字或其他字符如“s”,都输出请输入正确的数字!

(4)在显示以下菜单时,

 

输入2(购物结算在控制台输出以下信息:

 

输入商品编号后,询问用户要购买的数量

输入购买数量后,同时显示出购买的商品名称和购买的数量要求用户输入(Y/N)确认订单,如果用户输入Y输出应付总金额。如果输入N再次要求用户输入商品编号重新

 

扩展作业:

在实现以上功能的基础上,能够让用户自行选择是否退出购买系统,如果退出,要打印商品的列表,以及所有商品的总价,另外在每次购买商品时,都需要让用户确认订单,

,都需要确认用户是否继续购买?

实现功能截图如下:

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值