当前位置: 首页 > news >正文

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

今天重点是讲数组

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

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)        用两重循环实现打印一个菱形图案

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

转载于:https://www.cnblogs.com/wfx/archive/2010/08/04/1931933.html

相关文章:

  • 验证码图片生成代码
  • 第十二章 管理存储过程
  • 数据之美(十一):30 套 Infographics 作品欣赏
  • jbpm4.3整合web工程时异常解决方案
  • JQERY limittext 插件0.2版
  • 家族企业传承问题研究
  • [2010-8-30]
  • jquery js 下载|jquery-1.4.2 下载|jquery最新版本下载
  • CYQ.Data 轻量数据层之路 使用篇三曲 MAction 取值赋值(十四)
  • 图释WSPBuilder的使用
  • 第K大数问题
  • GirdView实现折叠式效果
  • SQL语句优化方法30例(转)
  • 小技巧:批量另存
  • c# 保留2位小数 整数格式化的操作!
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 2017届校招提前批面试回顾
  • Android系统模拟器绘制实现概述
  • CSS 三角实现
  • CSS实用技巧
  • docker容器内的网络抓包
  • golang 发送GET和POST示例
  • Java比较器对数组,集合排序
  • Koa2 之文件上传下载
  • mac修复ab及siege安装
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • 包装类对象
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 分类模型——Logistics Regression
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 面试遇到的一些题
  • 世界上最简单的无等待算法(getAndIncrement)
  • 算法之不定期更新(一)(2018-04-12)
  • 一天一个设计模式之JS实现——适配器模式
  • 用 Swift 编写面向协议的视图
  • 再谈express与koa的对比
  • Java总结 - String - 这篇请使劲喷我
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​什么是bug?bug的源头在哪里?
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #Java第九次作业--输入输出流和文件操作
  • #pragma data_seg 共享数据区(转)
  • #pragma 指令
  • (2)(2.10) LTM telemetry
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (floyd+补集) poj 3275
  • (java)关于Thread的挂起和恢复
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)ssm码农论坛 毕业设计 231126
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (数据结构)顺序表的定义