提示数组下标越界了 ???调试了好几天了 还是没看出是哪个地方越界了

提示数组下标越界了 ???调试了好几天了 还是没看出是哪个地方越界了

package com.imooc.system;

import java.util.Scanner;


public class glSystem {

            //显示用户提示操作的方法; (无参无返回值的方法)

       public void userPrompt() {

        System.out.println("*******************************************************");

        System.out.println("  ①  输入1  - 插入数据;");

        System.out.println("  ②  输入2  - 显示所有数据;");

        System.out.println("  ③  输入3  - 在指定位置插入数据;");

        System.out.println("  ④  输入4  - 查询能被3整除的数据;");

        System.out.println("  ⑤  输入0  - 退出管理;");

        System.out.println("*******************************************************");

       

       }

       //插入数据的方法;

       public int[] insertData() {

           

         

        int[] a=new int[6]; //声明一个长度为6的整形数组;

           Scanner  sc=new Scanner(System.in);    //开启键盘;

           if(a[a.length-1]==0) {      //判断数组是否为空,为空则输入数组元素并遍历数组内容;            

        for(int i=0;i<a.length-1;i++) {

        System.out.println("请输入第"+(i+1)+"个元素");

        a[i]=sc.nextInt();        

        }

           System.out.println("您刚输入的数组元素为: ");

        for(int i=0;i<a.length-1;i++) {

        System.out.print(a[i]+"  ");

                 }

    sc.close();   //关闭键盘;          

       }else {    //不为空则遍历所以数组内容;

       

             System.out.println("数组元素已经存在,具体元素如下: ");

         for(int i:a) {

          System.out.print(a[i]+"  ");

                  }

       }       

         return a; //返回当前a数组;

       }

       

       //显示用户为数组插入的所有数据;

       public void showData(int[] a,int length) {        

           a=insertData();

        System.out.println("数组元素的内容为:");

        for(int i=0;i<a.length;i++) {

        System.out.print(a[i]+"  ");

        }

        userPrompt();

       }

      //在指定位置修改数据;

       public void insertAtArray(int[] a,int n,int k){

       

           System.out.println("请输入要修改的数据:");

           Scanner sc=new Scanner(System.in);

           n=sc.nextInt();

           System.out.println("请输入要修改的位置:");            

           k=sc.nextInt();

           a[k]=n;

           sc.close();

           userPrompt();

       }

       

       

      //查出数组中是否能被三整除的元素,并显示输出;

       public void divTree(int[] a) {

               for(int i=0;i<a.length;i++) {

               if(a[i]%3==0){

                   System.out.print(a[i]+"   ");

               }

               }

               userPrompt();

       }

//----------------------------------------------------以下是主方法-------------------------------------------------------        

       

       public static void main(String[] args) {

       

          

       glSystem gl=new glSystem();   //创建glSystem类的对象gl;

       gl.userPrompt();   // 调用方法,输出用户提示操作信息;

       System.out.println("请输入对应的数字进行操作!"); 

       Scanner sc=new Scanner(System.in);   //开启键盘;

       

           

       while(true) {

                          int n=sc.nextInt();   //接收用户信息输入;

        

           switch(n) {

           case 1:

               gl.insertData();   //调用方法,为数组插入数据;

               break;

           case 2:                

   gl.showData(gl.insertData(), gl.insertData().length-1);   //传参并遍历数组中的所有数据;

   break;

           case 3:

               int k=sc.nextInt();   //接收用户信息输入;

                   gl.insertAtArray(gl.insertData(), n,k);

                   break;

           case 4:    

                   gl.divTree(gl.insertData());   //找出能被3整除的所有元素;

                   break;

           case 0:    

           System.out.println("退出程序!");

               break; 

               default:

                System.out.println("非法数值,请重新输入!");

           }

          

                 }

            

//            sc.close();   //关闭键盘输入   

}

       

}

http://img1.sycdn.imooc.com/climg//5991d56800011b4a12010719.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
耶嘿呦呦奥 2017-08-15 14:43:55

那你可以在程序执行结束的位置关闭键盘输入,譬如,你这里的代码,就可以在主方法中的case 0中调用sc.close()进行关闭。

提问者 qq_绿色空间装饰设计中心_0 2017-08-15 13:42:46

那如果我想在最后关闭键盘输入 要怎么操作?

耶嘿呦呦奥 2017-08-15 10:29:43

这个不是数组越界异常,出现这个问题的原因是,你在insertData方法中的第二个for循环下面调用了sc.close(),那么,当你调用完insertData方法之后,键盘将不能再接收数据,然后,当程序执行到主方法的int n = sc.nextInt()代码时,就会接收不到数据,导致报错。

解决方案:将insertData方法中的sc.close()去掉即可。

如果解决了你的疑惑,请采纳,祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师