码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-05-17 02:15:12      阅读:233      评论:0      收藏:0      [点我收藏+]

标签: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的开发的基础,有好的基础才能将更深的知识应用自如。


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

标签:javase数组

原文地址:http://10221941.blog.51cto.com/10211941/1651934

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!