达内-----选择循环结构与数组

今天重点是讲数组

先把昨天作业里的题目解决掉

123456 => 654321

123456%10=6 123456/10=12345

12345%10=5 12345/10=1234

6*10+5

1234%10=4 1234/10=123

…….

直到取整为零为止

import java.util.*; public class Reverse { public static void main(String args[]) { Scanner sc=new Scanner(System.in); System.out.println("请输入您要重新排列的数字"); int a= sc.nextInt(); int newNum=0; while (a!=0) { newNum=newNum*10+a%10; a=a/10; } System.out.println("倒序排列后,见下"); System.out.println(newNum); //具体的思路看上面的说明 System.out.println("************"); System.out.println("************"); System.out.println("现在开始互换变量的题目"); System.out.println("请输入a的值:"); int i=sc.nextInt(); System.out.println("请输入b的值"); int j=sc.nextInt(); System.out.println("************"); System.out.println("************"); i=i^j; //异或,相同为0,不同为1。最好能随便将与非,或非之类的逻辑弄懂 j=i^j; i=i^j; System.out.println("两者互换后:"); System.out.println("a="+i); System.out.println("b="+j); //这里的思路是将数字转为二进制,再进行异或运算 } }

switch(变量){

case :

……………..

break;

………………..

default:

….................

}

while循环与for循环完成互通,即所有for循环均可以转为while循环.

while(条件){

语句;

步进语句;

}

do{

action;

}while(条件);//注意,必须要有分号结束

do…while是先执行,后判断,至少执行一次!

public class TestWhile { public static void main(String args[]) { int i=0; while (i<0) { System.out.println(i); i++; } //先判断,后执行 System.out.println("**************"); int j=0; do{ System.out.println(j); j++; }while(j<0); //先执行,后判断,要注意两者区别 } }

break跳出循环(结束)

continue 结束循环(继续下一次)

import java.util.*; public class TestContinue { public static void main(String args[]) { for (int i=1;i<11 ;i++ ) { if (i%5==0) break; //退出循环 System.out.println(i); } System.out.println("*******"); for (int i=1;i<11 ;i++ ) { if (i%5==0) continue; //跳出循环 System.out.println(i); } } }

好了,现在开始正式讲解今天的重点了----------数组

数组不是数据,它是数据的容器(用来放数据的).

数组元素:即数据.每一条数据叫一个数组元素.

数组下标:0开始.

格式: 元素类型[] 变量名=new 类型[个数];

int [] arr= new int[5];

arr是数组

0-4是下标

arr[下标]是数组元素

arr[0] arr[1]…arr{4}

arr.length可以得到数组的元素个数,也叫数组长度.

import java.util.*; public class TestArray { public static void main(String args[]) { int[] arr = new int[5]; //注意数组定义的格式,元素类型[] 变量名 = new 元素类型[个数]; for (int i=0;i<arr.length ;i++ ) { arr[i]=i+1; //动态初始化 }//数组定义和初始化 //中间做了很多事情............. for (int i=0;i<arr.length ;i++ ) { System.out.println("arr["+i+"]="+arr[i]); }//取出数组元素 System.out.println("********************"); String[] str={"关羽","张飞","赵云","马超","黄忠"}; //静态初始化 for (int i=0;i<str.length ;i++ ) { System.out.println("str["+i+"]="+str[i]); } //如果数据可以从数据库/Scanner/文件等取出,就可以使用动态初始化 } };

定义数组后,数组元素有默认初始值

整型 不同位数的0 (:int 32 byte 8)

浮点 不同精度的0.0

booleam false

char ‘\u0000’

所有引用类型 null(空地址)

练习:

1. 要求输入全班同学的姓名和分数,并且保存到数组中,保存完毕后,计算全班同学的总分,平均分,最高分和最低分,并且输出.同时要求输出最高分和最低分的学生名字

import java.util.*; public class chengji { public static void main(String args[]) { int a; boolean p=true; Scanner sc = new Scanner(System.in); do{ System.out.println("请输入全班同学的人数:"); a = sc.nextInt(); if (a<0) { System.out.println("人数错误!"); p=false; } else{ p=true; }//如果将else语句去掉后,第一次输入了负数,进入了if语句,导致了P一直为false,接下来就算重新输入正数,也无法将p改为true,所以一直无法跳出循环 }while (p==false); //编写程序,一定要注意用户输入错误这个条件,活用if() return;等这类语句 String[] name=new String[a]; int[] score=new int[a]; //首先定义两个数组,一个放名字,一个放成绩 int total=0; double avg=0; //因为要求平均分,所以最好用小数 // int max=score[0]; // int min=score[0]; //要注意,不能在这个位置定义max和min,因为是顺序结构,如果定义了,那么两者的初值为0,会导致输出最低成绩为0 for (int i=0;i<a;i++ ) { int j=i+1; float temp=0; System.out.println("请输入第"+j+"个同学的姓名:"); name[i]= sc.next(); System.out.println("请输入第"+j+"个同学的成绩:"); String scoreStr = sc.next(); // System.out.println("******"+scoreStr+"******"+scoreStr.contains(".")); temp=Float.valueOf(scoreStr); //将String类型强制显示为Float类型? while (temp<0||scoreStr.contains(".")) //scoreStr.contains(".")是一个布尔值,用来判断是否含有小数点 { System.out.println("您输入有误,成绩不能为负数或小数。请重新输入:"); scoreStr = sc.next(); temp=Float.valueOf(scoreStr); //注意要二次判断 } //内部循环 score[i]=Integer.parseInt(scoreStr); //将string类型转为int类型? } //对数组的录入,到这一步,两个数组才算完成 int max=score[0]; int min=score[0]; for (int i=0;i<a;i++ ) { total=total+score[i]; if (max<score[i]) max = score[i]; if (min>score[i]) min = score[i]; //利用if语句求最大最小值,一定要会!! } avg = Math.round(1.0*total/a); //Math.round是四舍五入的函数,而括号里的1.0则是对数据进行转换 System.out.println("总成绩为"+total); System.out.println("平均分为"+avg); String maxName=""; String minName=""; //定义两个空的字符串 for (int i =0;i<a ;i++ ) { if (max==score[i]) //判断最高成绩的下标 { maxName=maxName+name[i]+" "; //maxName+的作用是强制转换类型 } if (min==score[i]) { minName=maxName+name[i]+" "; //将该下标的名字赋予给minName } } System.out.println("最高分是"+maxName+"同学,他的分数是"+max); System.out.println("最低分是"+minName+"同学,他的分数是"+min); } } /*总结:当利用boolean进行判断时,一定要注意第二次判断时,有没有改变boolean值!要多考虑输入有误 的状况,要学会利用if语句求最大最小值,简单的打断利用if()return来实现,要注意数据类型的转换,还有一 些变量的定义位置*/

2. 做一个生产随机密码的程序.要求:

a) 密码由大小写字母和数字组成

b) 生成6位随机密码

i. 思路:建立一个长度62char数组,A-Z,a-z,最后0-9

ii. 随机生成0-61的随机数,做下标

方法一:

import java.util.*; public class mima { public static char[] getChar(){ char[] mima=new char[62]; for (int i=0;i<26;i++ ) { mima[i]=(char)('A'+i); } for (int i=26;i<52;i++ ) { mima[i]=(char)('a'+i-26); } for (int i=52;i<62;i++ ) { mima[i]=(char)('0'+i-52); } return mima; } //以上为方法getChar()的创建 public static void main(String args[]) { char[] arr=getChar(); //方法的调用,如果方法中没有static,则必须要new char[] mima=new char[62]; for (int i=0;i<26;i++ ) { mima[i]=(char)('A'+i); } for (int i=26;i<52;i++ ) { mima[i]=(char)('a'+i-26); } for (int i=52;i<62;i++ ) { mima[i]=(char)('0'+i-52); } //创建密码表 // for (int i=0;i<62 ;i++ ) // { // System.out.println(mima[i]); // } String pwd=""; Random r = new Random(); for (int i=0;i<6 ;i++ ) { int index = r.nextInt(62); pwd=pwd+mima[index]; //要注意,pwd+的作用是强制转换类型 } System.out.println(pwd); } }

方法二:

public class Testpwd { public static void main(String args[]) { char[] codes=new char[62]; int index=0; for (char c='a';c<='z' ;c++,index++ ) //for循环的一种妙用!学会使用 { codes[index]=c; } for (char c='A';c<='Z' ;c++,index++ ) { codes[index]=c; } for (char c='0';c<='9' ;c++,index++ ) { codes[index]=c; } //与前一个列子比,简洁许多 System.out.println(java.util.Arrays.toString(codes)); //将char转成String String passwd=""; for (int i=0;i<6 ;i++ ) { int randomIndex=new java.util.Random().nextInt(codes.length); passwd+=codes[randomIndex]+""; } System.out.println(passwd); } }//总结:学会Arrays.toString(codes)来打印数组,还有就是for循环的一些使用,平时多练练循环和数组

作业:

1. 总结之前学过的(Linux暂时不看)

2. 熟练代码(要求不参考代码)

3. 编程

a) 写一个彩票的生成代码.

i. 要求

1. 1-33随机选7个无重复的数字(即用数组保存7个数字,所有数字与其下标以前的数字比较,如果有重复的,重新生成).

2. 测试方法用1-8随机选7.

b) 用两重循环实现打印一个菱形图案

作业明天写吧....很晚了....洗澡睡觉.........

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值