`

JavaSE数组详解与实战案例应用

阅读更多
1.数组声明:
第一种:数据类型 变量名[],例如:int x[];
第二种:数据类型[] 变量名=new 数据类型[要在内存中开辟的空间数量,例如:int[] x=new int[3];
第三种:数据类型[] 变量名=new 数据类型[]{元素1,元素2,元素3};

例子1:
public staticvoidmain(String[] arg){
       //定义一个字符串数组,将各个元素(也就是月饼)放入其中
       String[]names={"五仁月饼","香辣牛肉月饼","金嗓子月饼","韭菜月饼"};
     
       //通过for循环遍历一下数组,通过输出语句判断循环输出
       //names.length是数组的长度,names是输出数组下标为i的元素名称
       for(int i = 0;i<names.length;i++){
           System.out.println("我吃到第"+(i+1)+"个月饼是"+names);
       }
    }
输出结果:
我吃到第1个月饼是五仁月饼
我吃到第2个月饼是香辣牛肉月饼
我吃到第3个月饼是金嗓子月饼
我吃到第4个月饼是韭菜月饼
2.数组常见的异常(2种)
1)空指针异常(NullPointerException)
原因:数组没有分配内存空间
public staticvoidmain(String[] args) {
       //空指针异常
       //错误提示:NullPointerException
       String[]names=null;
       System.out.println(names[1]);
    }
输出结果:
Exception in thread "main" java.lang.NullPointerException
    ata2.NullPointerException(a2.java:10)
    ata2.main(a2.java:5)
2)数组越界异常
原因:下标超出了数组长度
public staticvoidmain(String[] args) {
       //数组越界异常
       //ArrayIndexOutOfBoundsException
       String[]names={"五仁月饼","香辣牛肉月饼","金嗓子月饼","韭菜月饼"};
       System.out.println(names[4]);

3.数组内存结构分析
栈内存和堆内存的区别:
数组内存分为 栈内存 和 堆内存。
栈内存 中是用来存放变量名的,存放确定大小的,存的是一个内存地址,通过它可以从堆内存中找到其对应的值,存取速度比堆内存快,例如:names
堆内存 中用来存放值的,存放不确定大小的,需要动态代码运行到这一句才会确定大小,例如:"小明"

4.多维数组
习题:3个班级各4名学员参赛,计算每个班的平均成绩
public staticvoidmain(String[] args) {
       //创建一个键盘输入
       Scannerinput = newScanner(System.in);
       //定义一个scores二维数组,第一个存班级数量,第二个存学生数量
       int scores[][]=new int[3][4];
       //遍历,将输入的成绩存入到二维数组scores中
       for (int i = 0; i < 3; i++) {
           for (int j = 0; j < 4; j++) {
              System.out.println("请输入第"+(i+1)+"个班级的第"+(j+1)+"个同学的成绩:");
              scores[j]=input.nextInt();
           }
       }
     
       //输出二位数组的每个元素
       for (int i = 0; i < 3; i++) {
           System.out.println("第"+(i+1)+"个班级的学员成绩:");
           int sum = 0;
           for (int j = 0; j < 4; j++) {
              System.out.println("第"+(j+1)+"个学员的成绩是:"+scores[j]);
              sum+=scores[j];
           }
           System.out.println("第"+(i+1)+"个班级的平均分是:"+(sum/4));
       }
    }

输出结果:
请输入第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,那么就提示错误,可以重新对该同学的成绩进行输入。
public staticvoidmain(String[] args) {
       Scannerinput = newScanner(System.in);
       int scores[][] = new int[3][4];
       for (int i = 0; i < 3; i++) {
           for (int j = 0; j < 4; j++) {
              System.out.println("请输入第"+(i+1)+"个班级的第"+(j+1)+"个同学的成绩:");
              scores[j]= input.nextInt();
              if (scores[j] > 100|| scores[j] < 0) {
                 
                  System.out.println("输入成绩无效,成绩为0-100分,请重新输入");
                  //方法1:通过j--将这次循环记录删除,这样下次循环就会再循环到这个同学的成绩输入
                  j--;
                  //方法2:在没有跳出循环的情况下再次输入一次
                  //System.out.println("请输入第"+(i+1)+"个班级的第"+(j+1)+"个同学的成绩:");
                  //scores[j] = input.nextInt();
              }
             
           }
       }
     
       for (int i = 0; i < 3; i++) {
           System.out.println("第"+(i+1)+"个班级同学成绩:");
           int sum = 0;
           for (int j = 0; j < 4; j++) {
              System.out.println("第"+(j+1)+"个同学的成绩为:"+scores[j]);
              sum+=scores[j];
           }
           System.out.println("第"+(i+1)+"个班级的平均成绩为:"+(sum/4));
           System.out.println("---------------------------------------------");
       }
    }

简单java教程例子:
1.猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数。
   public static void main(String[] args) {
       int num[] ={3,5,7,83,23,64};
       boolean flag = false;
       Scannerscan = newScanner(System.in);
       System.out.println("猜数字游戏");
       System.out.println("请输出一个数字:");
       int input = scan.nextInt();
       for (int i = 0; i < num.length; i++) {
           if (num == input) {
              flag= true;
              break;
           }
       }
       if (flag) {
           System.out.println("恭喜您猜对了~");
       }else{
           System.out.println("很遗憾,您猜错了~");
       }
    }
2.使用字母打印正三角形.
     A
    BBB
   CCCCC
  DDDDDDD
EEEEEEEEE
FFFFFFFFFFF
GGGGGGGGGGGGG
public staticvoidmain(String[] args) {
       char[] sj = {'A','B','C','D','E','F','G'};
       //打印的行数
       for (int i = 0; i < sj.length; i++) {
           //打印每行的空格数量
           for (int j = i; j < sj.length - 1; j++) {
              System.out.print(" ");
           }
           //打印每行的字母数量
           for (int j = 0; j <= i * 2;j++) {
              System.out.print(sj);
           }
           System.out.println();
       }
    }
3.求数组中的最大值最小值。
public staticvoidmain(String[] args) {
       int num[] ={3,29,33,6,90,24,50};
       int max = num[0];
       int min = num[0];
       for (int i = 0; i < num.length; i++) {
           if (num > max) {
              max= num;
           }
           if (num < min) {
              min = num;
           }
       }
       System.out.println("数组中的最大值为:" + max);
       System.out.println("数组中的最小值为:" + min);
    }
4.有一串数字:748,520,998,1001,250,512,502,使用冒泡排序分别对其进行由小到大,由大到小的排列起来。
public staticvoidmain(String[] args) {
       int num[] ={748,520,998,1001,250,512,502};
       int temp;
       for (int i = 0; i < num.length - 1; i++) {
           for (int j = 0; j < num.length - 1 - i; j++) {
              if (num[j] > num[j +1]) {//>是从小到大排,<是从大到小排
                  temp= num[j];
                  num[j]= num[j + 1];
                  num[j+ 1] = temp;
              }           
           }        
       }
       System.out.println("积分榜排名为:");
       for (int i = 0; i < num.length; i++) {
           System.out.print(num + " ");
       }
    }

实际案例应用:
双色球彩票程序
/**
* 应用案例:模拟双色球彩票程序
* 实现步骤:
* 1.系统生成一个篮球和6个红球,并存储起来
* 2.接受用户选号,1个篮球和6个红球
* 3.验证系统号码与用户号码是否匹配(是否中奖)
* 4.公布本期中奖号码
*/
双色球彩票规则:
一等奖:500万,1个蓝球,6个红球
二等奖:一等奖的30%,6个红球
三等奖:3000元,1个蓝球,5个红球
四等奖: 200元,5个红球或者1个蓝球,4个红球
五等奖:10元,4个红球或者1个蓝球,3个红球
六等奖:5元,1个蓝球
程序代码如下:
public staticvoidmain(String[] args) {
       int sysBlue;                //系统生成的1个蓝球号
       int[] sysRed = new int[6];      //系统生成的6个红球号
       int userBlue;               //用户输入的1个蓝球号
       int[] userRed = new int[6];     //用户输入的6个红球号
     
       int blueball = 0;           //正确的蓝球个数
       int redball = 0;            //正确的红球个数
     
       Randomr = newRandom();    //随机函数
       Scannerinput = newScanner(System.in);//键盘输入
     
       //红球所有的33个号
       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};
     
       //系统随机在1-16中生成蓝球号
       sysBlue= r.nextInt(16)+1;
     
       //随机生成的红球号码
       for (int i = 0; i < sysRed.length; i++) {
           while(true){
              int index = r.nextInt(33);      //随机生成0-32的下标
              if (redNum[index] != 0) {     
                  sysRed= redNum[index];
                  redNum[index]= 0;
                  break;
              }
           }
       }
     
       System.out.println("双色球彩票选号开始啦~");
       System.out.println("请选择篮球号码(16选1):");
       userBlue= input.nextInt();
       System.out.println("请选择红球号码(33选6):");
       for (int i = 0; i < userRed.length; i++) {
           userRed= input.nextInt();
       }
     
       //验证篮球和红球的正确个数
       //---------验证篮球
       if (userBlue == sysBlue) {
           blueball= 1;
       }
     
       //---------验证红球
       for (int i = 0; i < userRed.length; i++) {
           for (int j = 0; j < sysRed.length; j++) {
              if (userRed ==sysRed[j]) {
                  redball++;
                  break;
              }
           }
       }
     
       //判断是否中奖
       if (blueball == 1&& redball == 6) {
           System.out.println("恭喜你,中了一等奖500万!");
       }else if(redball == 6){
           System.out.println("恭喜你,中了二等奖");
       }else if(blueball == 1&& redball == 5){
           System.out.println("恭喜你,中了三等奖,3000元");
       }else if(redball == 5 ||(blueball == 1 && redball == 4)){
           System.out.println("恭喜你,中了四等奖,200元");
       }else if(redball == 4 ||(blueball == 1 && redball == 3)){
           System.out.println("恭喜你,中了五等奖,10元");
       }else if(blueball == 1){
           System.out.println("恭喜你,中了六等奖,5元");
       }else{
           System.out.println("很遗憾,您没有中奖~~继续加油~~╮(╯▽╰)╭");
       }
     
       //公布本期中奖号码
       int temp;
       for (int i = 0; i < sysRed.length-1; i++) {
           for (int j = 0; j < sysRed.length-1-i; j++) {
              if (sysRed[j] >sysRed[j+1]) {
                  temp= sysRed[j];
                  sysRed[j]= sysRed[j+1];
                  sysRed[j+1] = temp;
              }
           }
       }
     
       System.out.println("本期的中奖号码为:");
       System.out.println("红球:");
       for (int i = 0; i < sysRed.length; i++) {
           System.out.println(sysRed+" ");
       }
       System.out.println();
       System.out.print("篮球:" + sysBlue);
    }

有人说JavaSE的意义何在,不就是一个Dos窗口输出几个白字而已,在实际开发中也很少用,其实不然,JavaSE是JavaEE的开发的基础,有好的基础才能将更深的知识应用自如。
分享到:
评论
1 楼 ldh8800 2015-05-18  
 

相关推荐

    JavaSE进阶-02-数组.pdf

    JavaSE进阶课程中,数组是一个重要的概念,它在编程中起到了存储一组相同类型数据的作用。数组被设计成一种引用数据类型,意味着它在内存中占据连续的空间,并且可以存储基本类型(如int、float)或引用类型(如对象...

    JavaSE之数组与集合类

    在这个话题中,我们将探讨Java中的数组和集合类,这些都是JavaSE阶段的重要知识点。 首先,让我们从面向对象编程说起。面向对象编程(OOP)是Java语言的基础,与面向过程编程不同,后者关注的是执行步骤,而OOP更...

    JAVASE基础知识详解

    JAVASE基础知识详解

    JavaSE反射详解.ppt

    JavaSE反射详解

    JavaSE进阶数组讲义

    【JavaSE进阶数组讲义】深入解析 数组在Java编程语言中扮演着重要的角色,它是数据结构的基础,用于存储一组具有相同类型的元素。数组的特点包括: 1. **数组的本质**:数组是一种引用数据类型,它在内存中表现为...

    javaSE 反射详解1

    javaSE 反射详解。

    javase阶段15个实战项目代码

    JavaSE(Java Standard Edition)是Java编程语言的基础部分,它提供了用于开发桌面应用程序的类库和API。在JavaSE阶段,学习者会接触到许多核心概念和技术,这些在后续的JavaEE(企业版)和Android开发中都至关重要...

    JavaSE集合详解.ppt

    JavaSE集合详解.ppt

    JavaSE-数组集合和链表集合 数组和链表.docx

    ### JavaSE中的数组集合与链表集合解析 #### 一、数组集合 数组集合是一种基本的数据结构,在Java中被广泛使用。它具有以下特点: 1. **有序性**:数组集合中的元素按照一定的顺序排列,这使得我们可以通过索引...

    JavaSE小项目---客户管理系统

    在本JavaSE小项目——客户管理系统中,我们聚焦于实现一个基础的数据库操作模拟,主要功能包括对客户信息的添加、删除、修改和查询。这个系统以控制台(黑窗口)为界面,采用对象数组来存储和管理数据,提供了一个...

    JavaSE使用数组模拟商城项目

    ...商品管理模块:1.商品一览 2.商品查询 3....库存管理模块,1....此项目只涉及JavaSE部分,涉及到的只是Java数组、接口等知识,不涉及集合(但是后续会更新),不涉及数据库,不涉及数据库,不涉及数据库

    李兴华-JavaSE开发详解笔记-李兴华

    李兴华的"JavaSE开发详解笔记"覆盖了这些核心概念,并通过实例解析,帮助读者深入理解并熟练应用。通过学习这份笔记,开发者将能够全面掌握JavaSE开发技能,为进一步学习JavaEE和Android等高级技术奠定坚实的基础。

    JavaSE 基础 数组.pdf

    寻找数组中的最大值和最小值,可以遍历数组并比较当前元素与已知最大值和最小值,如下所示: ```java int[] arr = {90, 100, 98, 67, 45, 79}; int max = arr[0]; int min = arr[0]; for (int i = 1; i ; i++) { ...

    5、JavaSE:数组-11.pdf

    JavaSE中的数组是一种重要的数据结构,它允许程序员存储和管理一组具有相同数据类型的元素。数组的概念可以类比为一个容器,其中每个元素都有一个唯一的标识,即数组下标,用于区分不同的元素。数组的使用使得处理多...

    (5)javaSE_数组.xmind

    主要是关于数组的xmind思维导图梳理的图解,更好的理解数组的应用

    数组代码(JAVASE)

    数组代码(JAVASE)

    JavaSE__数组及常用算法.ppt

    JavaSE__数组及常用算法.ppt

    05_javase复习总结之数组

    ### 05_javase复习总结之数组 #### 数组定义和基本用法 在Java中,数组是一种基本的数据结构,用于存储固定大小的同类型元素集合。它提供了高效的访问和管理这些元素的方式。 ##### 数组声明与初始化 1. **声明...

    JAVA SE应用详解.pdf

    Java语言具有面向对象、与平台无关、简单稳定、支持多线程等特点,已经成为当下最重要的网络编程语言之一。本书分为12个章节,主要包括Java语言概述 、基本语法规则、面向对象核心技术、数组和集合、异常处理、文件...

Global site tag (gtag.js) - Google Analytics