【史上最强JavaSE笔记】之数组篇

各位程序猿,各位攻城狮,各位蜥蜴鸥以及各位棕鲸鲤们~~大家好,我是潘师傅,欢迎大家收看由我为你们带来的【史上最强JavaSE笔记】系列,其实也可以叫【嘻哈JavaSE笔记】的,第一次在博客园发帖,想想还真是有点小激动呢,各位求支持呀,哈哈,那么回归正题,我把自己之前学习积累的笔记拿出来跟大家分享一下,方便大家更好的理解和复习,希望能够对大家有所帮助哈,这次发的是JavaSE方面数组篇的,内容不一定全面哦,欢迎大家前来留言交流哈,不足的地方还望大家多多指出和指导哈~(由于首次发文章,布局可能比较乱,不美观,还望大家多多指导)。

1.数组声明:

第一种:数据类型 变量名[],例如:int x[];

第二种:数据类型[] 变量名=new 数据类型[要在内存中开辟的空间数量,例如:int[] x=new int[3];

第三种:数据类型[] 变量名=new 数据类型[]{元素1,元素2,元素3};

例子1:

 1 public static void main(String[] arg){
 2
 3        //定义一个字符串数组,将各个元素(也就是月饼)放入其中
 4
 5        String[]names={"五仁月饼","香辣牛肉月饼","金嗓子月饼","韭菜月饼"};
 6
 7
 8
 9        //通过for循环遍历一下数组,通过输出语句判断循环输出
10
11        //names.length是数组的长度,names是输出数组下标为i的元素名称
12
13        for(int i = 0;i<names.length;i++){
14
15            System.out.println("我吃到第"+(i+1)+"个月饼是"+names);
16
17        }
18
19 }

输出结果:

我吃到第1个月饼是五仁月饼

我吃到第2个月饼是香辣牛肉月饼

我吃到第3个月饼是金嗓子月饼

我吃到第4个月饼是韭菜月饼

2.数组常见的异常(2种)

1.空指针异常(NullPointerException)

原因:数组没有分配内存空间

 1 public static void main(String[] args) {
 2
 3        //空指针异常
 4
 5        //错误提示:NullPointerException
 6
 7        String[]names=null;
 8
 9        System.out.println(names[1]);
10
11 }

输出结果:

Exception in thread "main" java.lang.NullPointerException

    ata2.NullPointerException(a2.java:10)

    ata2.main(a2.java:5)

2.数组越界异常

原因:下标超出了数组长度

 1 public static void main(String[] args) {
 2
 3        //数组越界异常
 4
 5        //ArrayIndexOutOfBoundsException
 6
 7        String[]names={"五仁月饼","香辣牛肉月饼","金嗓子月饼","韭菜月饼"};
 8
 9        System.out.println(names[4]);
10
11 }

输出结果:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:4

ata3.main(a3.java:5)

3.数组内存结构分析

栈内存和堆内存的区别:

数组内存分为 栈内存 和 堆内存。

栈内存 中是用来存放变量名的,存放确定大小的,存的是一个内存地址,通过它可以从堆内存中找到其对应的值,存取速度比堆内存快,例如:names

堆内存 中用来存放值的,存放不确定大小的,需要动态代码运行到这一句才会确定大小,例如:"小明"

4.多维数组

习题:3个班级各4名学员参赛,计算每个班的平均成绩

 1 public static void main(String[] args) {
 2        //创建一个键盘输入
 3        Scannerinput = newScanner(System.in);
 4        //定义一个scores二维数组,第一个存班级数量,第二个存学生数量
 5        int scores[][]=new int[3][4];
 6        //遍历,将输入的成绩存入到二维数组scores中
 7        for (int i = 0; i < 3; i++) {
 8            for (int j = 0; j < 4; j++) {
 9               System.out.println("请输入第"+(i+1)+"个班级的第"+(j+1)+"个同学的成绩:");
10               scores[j]=input.nextInt();
11            }
12        }
13
14        //输出二位数组的每个元素
15        for (int i = 0; i < 3; i++) {
16            System.out.println("第"+(i+1)+"个班级的学员成绩:");
17            int sum = 0;
18            for (int j = 0; j < 4; j++) {
19               System.out.println("第"+(j+1)+"个学员的成绩是:"+scores[j]);
20               sum+=scores[j];
21            }
22            System.out.println("第"+(i+1)+"个班级的平均分是:"+(sum/4));
23        }
24     }

输出结果:

请输入第1个班级的第1个同学的成绩:

61

请输入第1个班级的第2个同学的成绩:

71

请输入第1个班级的第3个同学的成绩:

85

请输入第1个班级的第4个同学的成绩:

92

请输入第2个班级的第1个同学的成绩:

64

请输入第2个班级的第2个同学的成绩:

73

请输入第2个班级的第3个同学的成绩:

95

请输入第2个班级的第4个同学的成绩:

66

请输入第3个班级的第1个同学的成绩:

35

请输入第3个班级的第2个同学的成绩:

73

请输入第3个班级的第3个同学的成绩:

83

请输入第3个班级的第4个同学的成绩:

94

第1个班级的学员成绩:

第1个学员的成绩是:61

第2个学员的成绩是:71

第3个学员的成绩是:85

第4个学员的成绩是:92

第1个班级的平均分是:77

第2个班级的学员成绩:

第1个学员的成绩是:64

第2个学员的成绩是:73

第3个学员的成绩是:95

第4个学员的成绩是:66

第2个班级的平均分是:74

第3个班级的学员成绩:

第1个学员的成绩是:35

第2个学员的成绩是:73

第3个学员的成绩是:83

第4个学员的成绩是:94

第3个班级的平均分是:71

优化思考:成绩为0-100分,如何在录入成绩的时候保证不录入错误呢?

分析:写入判断,如果输入的成绩大于100或者小于0,那么就提示错误,可以重新对该同学的成绩进行输入。

 1 public static void main(String[] args) {
 2        Scannerinput = newScanner(System.in);
 3        int scores[][] = new int[3][4];
 4        for (int i = 0; i < 3; i++) {
 5            for (int j = 0; j < 4; j++) {
 6               System.out.println("请输入第"+(i+1)+"个班级的第"+(j+1)+"个同学的成绩:");
 7               scores[j]= input.nextInt();
 8               if (scores[j] > 100|| scores[j] < 0) {
 9
10                   System.out.println("输入成绩无效,成绩为0-100分,请重新输入");
11                   //方法1:通过j--将这次循环记录删除,这样下次循环就会再循环到这个同学的成绩输入
12                   j--;
13                   //方法2:在没有跳出循环的情况下再次输入一次
14                   //System.out.println("请输入第"+(i+1)+"个班级的第"+(j+1)+"个同学的成绩:");
15                   //scores[j] = input.nextInt();
16               }
17
18            }
19        }
20
21        for (int i = 0; i < 3; i++) {
22            System.out.println("第"+(i+1)+"个班级同学成绩:");
23            int sum = 0;
24            for (int j = 0; j < 4; j++) {
25               System.out.println("第"+(j+1)+"个同学的成绩为:"+scores[j]);
26               sum+=scores[j];
27            }
28            System.out.println("第"+(i+1)+"个班级的平均成绩为:"+(sum/4));
29            System.out.println("---------------------------------------------");
30        }
31     }

练习题:

1.猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数。

 1 public static void main(String[] args) {
 2        int num[] ={3,5,7,83,23,64};
 3        boolean flag = false;
 4        Scannerscan = newScanner(System.in);
 5        System.out.println("猜数字游戏");
 6        System.out.println("请输出一个数字:");
 7        int input = scan.nextInt();
 8        for (int i = 0; i < num.length; i++) {
 9            if (num == input) {
10               flag= true;
11               break;
12            }
13        }
14        if (flag) {
15            System.out.println("恭喜您猜对了~");
16        }else{
17            System.out.println("很遗憾,您猜错了~");
18        }
19     }

2.使用字母打印正三角形.

A

BBB

CCCCC

DDDDDDD

EEEEEEEEE

FFFFFFFFFFF

GGGGGGGGGGGGG

 1 public static void main(String[] args) {
 2        char[] sj = {‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘};
 3        //打印的行数
 4        for (int i = 0; i < sj.length; i++) {
 5            //打印每行的空格数量
 6            for (int j = i; j < sj.length - 1; j++) {
 7               System.out.print(" ");
 8            }
 9            //打印每行的字母数量
10            for (int j = 0; j <= i * 2;j++) {
11               System.out.print(sj);
12            }
13            System.out.println();
14        }
15     }

3.求数组中的最大值最小值。

 1 public static void main(String[] args) {
 2         int num[] = { 3, 29, 33, 6, 90, 24, 50 };
 3         int max = num[0];
 4         int min = num[0];
 5         for (int i = 0; i < num.length; i++) {
 6             if (num[i] > max) {
 7                 max = num[i];
 8             }
 9             if (num[i] < min) {
10                 min = num[i];
11             }
12         }
13         System.out.println("数组中的最大值为:" + max);
14         System.out.println("数组中的最小值为:" + min);
15     }  

4.有一串数字:748,520,998,1001,250,512,502,使用冒泡排序分别对其进行由小到大,由大到小的排列起来。

 1 public static void main(String[] args) {
 2        int num[] ={748,520,998,1001,250,512,502};
 3        int temp;
 4        for (int i = 0; i < num.length - 1; i++) {
 5            for (int j = 0; j < num.length - 1 - i; j++) {
 6               if (num[j] > num[j +1]) {//>是从小到大排,<是从大到小排
 7                   temp= num[j];
 8                   num[j]= num[j + 1];
 9                   num[j+ 1] = temp;
10               }
11            }
12        }
13        System.out.println("积分榜排名为:");
14        for (int i = 0; i < num.length; i++) {
15            System.out.print(num + " ");
16        }
17     }

实战应用案例:

双色球彩票程序

  1 /**
  2 * 应用案例:模拟双色球彩票程序
  3 * 实现步骤:
  4 * 1.系统生成一个篮球和6个红球,并存储起来
  5 * 2.接受用户选号,1个篮球和6个红球
  6 * 3.验证系统号码与用户号码是否匹配(是否中奖)
  7 * 4.公布本期中奖号码
  8 */
  9 双色球彩票规则:
 10 一等奖:500万,1个蓝球,6个红球
 11 二等奖:一等奖的30%,6个红球
 12 三等奖:3000元,1个蓝球,5个红球
 13 四等奖: 200元,5个红球或者1个蓝球,4个红球
 14 五等奖:10元,4个红球或者1个蓝球,3个红球
 15 六等奖:5元,1个蓝球
 16 程序代码如下:
 17 public static void main(String[] args) {
 18        int sysBlue;                //系统生成的1个蓝球号
 19        int[] sysRed = new int[6];      //系统生成的6个红球号
 20        int userBlue;               //用户输入的1个蓝球号
 21        int[] userRed = new int[6];     //用户输入的6个红球号
 22
 23        int blueball = 0;           //正确的蓝球个数
 24        int redball = 0;            //正确的红球个数
 25
 26        Randomr = newRandom();    //随机函数
 27        Scannerinput = newScanner(System.in);//键盘输入
 28
 29        //红球所有的33个号
 30        int[] redNum ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32};
 31
 32        //系统随机在1-16中生成蓝球号
 33        sysBlue= r.nextInt(16)+1;
 34
 35        //随机生成的红球号码
 36        for (int i = 0; i < sysRed.length; i++) {
 37            while(true){
 38               int index = r.nextInt(33);      //随机生成0-32的下标
 39               if (redNum[index] != 0) {
 40                   sysRed= redNum[index];
 41                   redNum[index]= 0;
 42                   break;
 43               }
 44            }
 45        }
 46
 47        System.out.println("双色球彩票选号开始啦~");
 48        System.out.println("请选择篮球号码(16选1):");
 49        userBlue= input.nextInt();
 50        System.out.println("请选择红球号码(33选6):");
 51        for (int i = 0; i < userRed.length; i++) {
 52            userRed= input.nextInt();
 53        }
 54
 55        //验证篮球和红球的正确个数
 56        //---------验证篮球
 57        if (userBlue == sysBlue) {
 58            blueball= 1;
 59        }
 60
 61        //---------验证红球
 62        for (int i = 0; i < userRed.length; i++) {
 63            for (int j = 0; j < sysRed.length; j++) {
 64               if (userRed ==sysRed[j]) {
 65                   redball++;
 66                   break;
 67               }
 68            }
 69        }
 70
 71        //判断是否中奖
 72        if (blueball == 1&& redball == 6) {
 73            System.out.println("恭喜你,中了一等奖500万!");
 74        }else if(redball == 6){
 75            System.out.println("恭喜你,中了二等奖");
 76        }else if(blueball == 1&& redball == 5){
 77            System.out.println("恭喜你,中了三等奖,3000元");
 78        }else if(redball == 5 ||(blueball == 1 && redball == 4)){
 79            System.out.println("恭喜你,中了四等奖,200元");
 80        }else if(redball == 4 ||(blueball == 1 && redball == 3)){
 81            System.out.println("恭喜你,中了五等奖,10元");
 82        }else if(blueball == 1){
 83            System.out.println("恭喜你,中了六等奖,5元");
 84        }else{
 85            System.out.println("很遗憾,您没有中奖~~继续加油~~╮(╯▽╰)╭");
 86        }
 87
 88        //公布本期中奖号码
 89        int temp;
 90        for (int i = 0; i < sysRed.length-1; i++) {
 91            for (int j = 0; j < sysRed.length-1-i; j++) {
 92               if (sysRed[j] >sysRed[j+1]) {
 93                   temp= sysRed[j];
 94                   sysRed[j]= sysRed[j+1];
 95                   sysRed[j+1] = temp;
 96               }
 97            }
 98        }
 99
100        System.out.println("本期的中奖号码为:");
101        System.out.println("红球:");
102        for (int i = 0; i < sysRed.length; i++) {
103            System.out.println(sysRed+" ");
104        }
105        System.out.println();
106        System.out.print("篮球:" + sysBlue);
107
108     }
109  
时间: 2024-10-29 19:11:40

【史上最强JavaSE笔记】之数组篇的相关文章

史上最强微商指南之能力篇

史上最强算法论战:请不要嘻哈,这是哈希[下]

史上最强算法论战:请不要嘻哈,这是哈希[下] 欢迎个人转发朋友圈,机构及媒体转载需在开篇声明,转自微信公号“知象科技” 论战主角之一龙博:知象科技CEO,欲了解龙博及知象科技,请点击文末“阅读原文”. 这是“美丽互联”微信群里的一次算法论战,感谢书记员硅谷寒(梁寒)精彩的说书般的整理. 书接上文 一夜过去了…孤独虎精神抖擞的回来了! [书记员注:上集说到独孤虎被龙博两次判零分,已经到了精神分裂的边缘.于是他决定回家休养生息,以图再战.果不其然,第二天,独孤虎首先跳出来,带来了他的第四种方案.我们

史上最强】网上所有的Axure元器件、UI、8.0安装包汉化包资源汇总

史上最强]网上所有的Axure元器件.UI.8.0安装包汉化包资源汇总        目前产品经理工具中应该最火的就是axure了,简直就是人人必备.确实,在实现一些复杂的交互上,axure很管用,但是也有缺点,就是元器件不够多,很多要自己画,不美观.今天,8kvv就给大家整理了现有axure的元器件.Axure8.0.axure汉化包.苹果iOSUI及安卓5.0安卓6.0UI.很全啦! 大家慢慢欣赏哦! 列举下为大家整理的网上所有的Axure的实用资源(下载地址在最后),包括: 1.Axure

史上最强实名制来袭!究竟切中了谁的要害?

对常在互联网上蹦跶的你,现在只想说三个字:实名制!近日,bilibili(B站)发布公告称,"应国家相关政策规定要求,从7月5日开始,UP主(视频创作者或上传者)上传视频内容(包括新增.编辑.换源等)需通过实名验证,方可编辑视频稿件".而这,可以看做是史上最强实名制的一部分. 事实上,近段时间以来,实名制是一直是网上热议的争议性话题之一.是否需要实名制.是否对部分用户的隐私权构成威胁.是否影响言论自由及互联网开放的本质精神.实名制究竟有多大的威慑力--史上最强实名制的全面来袭,究竟切中

史上最强型人养成秘籍: 90 天肥仔变型男实录

史上最强型人养成秘籍: 90 天肥仔变型男实录[12P] 这是一篇最近很火的帖子.主人公B.K ,是一个从来没有看见过自己腹肌的三十三岁中年普通男人,就是因为青春易逝的危机感,让他下定决心给自己一个交代!于是用了九十天,他做到了!减脂和塑身计划从2014年3 月15日开始到6月25日结束,从一个非典型性胖子.微胖界翘楚.土圆肥代表,到八块腹肌霸气外露,仅仅90天. 前几天在机场,遇见一个三四个月没见的小姐妹,在她面前半天没认出我.这样的情况,近期已经第三次了.因为这个原因,我不得已又去拍了新的证

翻翻git之---史上最强的图片选择器 GalleryFinal(顺带附下麦麦,当当的近照)

转载请注明出处:王亟亟的大牛之路 技术内容在P2,P1是废话可以跳过 P1:(开胃菜) 最近手头上工作的事差不多告一段落了,可以把更多的精力花在学习上了,还是会继续翻git这部分的文章(搬运工),然后准备整整一些之前没接触过的知识点(具体学什么没想好,等会看看去) 先上一下家里宝贝的近照 P2:(正菜) 今天上的是一个自称是"史上最强的图片选择器" GalleryFinal 话不多说先看看效果 作者几乎实现了我们平时所需的"皂片"选择器的所有功能,还带有一定的编辑和

喜欢,就要说出来,别等错失后才觉醒!史上最强告白!

喜欢,就要说出来,别等错失后才觉醒!史上最强告白!! 2016-08-06 亚谷科技 下辈子也要找到你 孙露 - 孙情流露 人一生会错过很多东西, 回得了过去,回不了当初. 关于爱情 喜欢 就要大声的说出来, 别再去等一个人.或者等一个故事. <偶像版> <太阳的后裔>第一集里男主就喜欢上了女主. -- “和我一起看电影吧?快回答,没时间了,好还是不好?” -- “好!” -- “那就这样说定了!” 喜欢就别矫情   <剧情版> “不好意思,刚认识就喜欢你!” 无论结果

【插件】史上最强编辑器通用ctags插件OpenCTags使用指南v1.2--开发者必备

Changes Log: v1.2.0 2011-12-4 支持Java编写的可以设置用户配置的编辑工具 增加当前文件类查找Tags功能 增加设置当前目录参数 完善多种主流轻量级编辑器的配置 v1.1.0 2011-11-26 完善提示窗口的显示样式 编辑器配置使用Json格式配置文件,方便定制到自己喜欢的编辑器,主流编辑器一网打尽 v1.0.4 2011-11-21 支持提示窗口拖动,按住鼠标右键,即可拖拖拖[上一版本为鼠标左键] 增加回车键功能,按下可以会自动打开对应的文件并定位到对应的位置

豆瓣看到一个史上最强最犀利骂人帖

豆瓣看到一个史上最强最犀利骂人帖 http://beijing.edeng.cn/xinxi/179414813.htmlhttp://beijing.edeng.cn/xinxi/179414852.htmlhttp://beijing.edeng.cn/xinxi/179414847.htmlhttp://beijing.edeng.cn/xinxi/179414862.htmlhttp://beijing.edeng.cn/xinxi/179414872.htmlhttp://beijin