运行出现了问题但是看不出来,请大神指导一下

运行出现了问题但是看不出来,请大神指导一下

package com.Imooc.method;

import java.util.Scanner;

public class DataManage {
    //插入数据
    public int[] insertData() {
        int []a1=new int[10];
        for (int i=0;i<a1.length-1;i++) {
            Scanner s1=new Scanner(System.in);
            System.out.println("请输入第"+(i+1)+"个元素:");
            int n=s1.nextInt();
            a1[i]=n;
        if(a1[i]==0&i<9) {
            System.out.println("输入的数据不能为0!");break;
            }
            System.out.println("数组的元素为:");
            for (int j=0;j<a1.length;j++) {
                System.out.print(a1[j]+" ");
            }
        }
        System.out.println();
        return a1;
    }
    //显示所有数据
    public void showData(int[] a, int length) {
        System.out.println("数组的元素为:");
        for (int i=0;i<=a.length;i++) {
                System.out.print(a[i]+" ");
            }
            System.out.println();
        }
    //指定位置处插入数据
    public void insertAtArray(int []a,int n,int k) {
        System.out.println("请输入要插入的数据:");
        Scanner s2=new Scanner (System.in);
        n=s2.nextInt();
        System.out.println("请选择要插入的位置:");
        Scanner s3=new Scanner(System.in);
        k=s3.nextInt();
        for(int i = a.length-1;i>=k;i--){
        a[i]=a[i-1];
        }
        a[k]=n;
        for(int i=0;i<a.length;i++){
            System.out.println(a[i]);
            }
    }
    //查询能被三整除的数据
    public void divThree(int []a) {
        
    }
    //提示信息的方法
    public void notice(){
        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("**********************************");
        System.out.println("输入数据进行操作:");    
    }
    
    public static void main(String[] args) {
        DataManage d0=new DataManage();
        DataManage d1=new DataManage();
        DataManage d2=new DataManage();
        DataManage d3=new DataManage();
        DataManage d4=new DataManage();
        d0.notice();
        Scanner s=new Scanner(System.in);
        int n=s.nextInt();
        int[]b=d1.insertData();
        while(true&n!=0)    
        switch (n) {
        case 1:
            d1.insertData(); d0.notice();n=s.nextInt();break;
        case 2:
            d2.showData(b, 10);d0.notice();n=s.nextInt();break;
        case 3:
            d3.insertAtArray(b, n, n);d0.notice();n=s.nextInt();break;
        case 4:
            
        default:
            System.out.println("请输入0-4的整数!超出操作范围");d0.notice();n=s.nextInt();break;
        }
        System.out.println("退出!");
    }
}

正在回答

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

3回答

1、主方法中,类的对象定义一个即可。

2、定义数组b时,不能直接收insertData()方法插入数据,只有输入1时,才插入数据。应该定义为int[] b = new int[10]; 在casse 1后,用b接收插入的数据。

3、在插入数据的方法中,显示数组元素的代码应该在循环的外边,建议调用显示所有数据的方法来展示数组元素。另外判断a1[i]==0后,建议将i减1,调用continue结束当前循环,继续下次循环,而不是直接退出来。

4、显示所有数据的方法中,for()循环应该是i<a.length而不是<=,否则会出现数组下标越界异常。

5、查询能被3整除的方法没有完成。可按如下思路写:定义一个字符串str用于存放能被3整除的数据,设置boolean变量的值为false。使用for循环遍历数组元素,在循环中使用if语句判断是否能被3整除,如果满足if语句的条件,则设置boolean变量的值为true,并将能被3整除的数据用字符串拼接起来,如str=str+b[i] +” ”;  然后在循环外判断如果boolean为true则输出str的值,否则输出:数组中没有数据能被3整除。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • jjboy 提问者 #1
    你好,我接受了你的建议对插入数据方法进行修改,但是会出现输入两遍数组的问题,代码如下: public int[] insertData() { int []a1=new int[10]; for (int i=0;i<a1.length-1;i++) { Scanner s1=new Scanner(System.in); System.out.println("请输入第"+(i+1)+"个元素:"); int n=s1.nextInt(); a1[i]=n; if(a1[i]==0) { i-=1; System.out.println("输入的数据不能为0!");continue; } } System.out.println("数组的元素为:"); for (int j=0;j<a1.length;j++) { System.out.print(a1[j]+" "); } System.out.println(); return a1; } 我认为应该在修改不为零的元素后就可以结束并输出,但是这个代码要输入两遍数组并只显示后面输入的数组,请问这样的问题出在哪?
    2018-10-23 15:01:13
  • 好帮手慕阿满 回复 提问者 jjboy #2
    按照上述方法修改后,并将同学的insertData()方法写入,并没有出现要输入两遍数组的情况,建议同学将修改后的代码贴上来。在添加回答中,选择代码语言,然后选择Java,再贴代码,这样贴出来的代码有格式。另外,关于作业,同学可以将作业上传,我们这边会有老师批改,给你的作业提出具体的修改意见。祝:学习愉快!
    2018-10-23 16:08:35
  • jjboy 提问者 回复 好帮手慕阿满 #3
    你好我已经将完整代码附上,请能再帮我看看吗?
    2018-10-23 16:14:33
好帮手慕阿满 2018-10-23 16:29:10

同学的程序要求输入两遍数组是因为在case 1后insertData()方法调用了两遍。将dm.insertData();去掉一个即可。另外在主方法中,建议将重复的代码写在switch外,循环内。所以主方法中的代码可参考如下:

http://img1.sycdn.imooc.com//climg/5bcedba50001669e06330642.jpg

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

提问者 jjboy 2018-10-23 16:12:12
public class DataManage {
    //插入数据
    public int[] insertData() {
        int []a1=new int[10];
        for (int i=0;i<a1.length-1;i++) {
            Scanner s1=new Scanner(System.in);
            System.out.println("请输入第"+(i+1)+"个元素:");
            int n=s1.nextInt();
            a1[i]=n;
        if(a1[i]==0&i<9) {
            i-=1;
            System.out.println("输入的数据不能为0!");continue;
            }    
        }
        System.out.println("数组的元素为:");
            for (int j=0;j<a1.length;j++) {
                System.out.print(a1[j]+" ");
            }
        System.out.println();
        return a1;
    }
    //显示所有数据
    public void showData(int[] a, int length) {
        System.out.println("数组的元素为:");
        for (int i=0;i<a.length;i++) {
                System.out.print(a[i]+" ");
            }
            System.out.println();
        }
    //指定位置处插入数据
    public void insertAtArray(int []a,int n,int k) {
        System.out.println("请输入要插入的数据:");
        Scanner s2=new Scanner (System.in);
        n=s2.nextInt();
        System.out.println("请选择要插入的位置:(1-9的整数)");
        Scanner s3=new Scanner(System.in);
        k=s3.nextInt();
        for(int i = a.length-1;i>=k;i--){
        a[i]=a[i-1];
        }
        a[k]=n;
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
            }
        System.out.println();
    }
    //查询能被三整除的数据
    public void divThree(int []a) {
        
    }
    //提示信息的方法
    public void notice(){
        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("**********************************");
        System.out.println("输入数据进行操作:");    
    }
    
    public static void main(String[] args) {
        DataManage dm=new DataManage();
        dm.notice();
        Scanner s=new Scanner(System.in);
        int n=s.nextInt();
        int[]b=new int[10];
        while(true&n!=0)    
        switch (n) {
        case 1:
            b=dm.insertData();
            dm.insertData(); dm.notice();n=s.nextInt();break;
        case 2:
            dm.showData(b, 10);dm.notice();n=s.nextInt();break;
        case 3:
            dm.insertAtArray(b, n, n);dm.notice();n=s.nextInt();break;
        case 4:
            
        default:
            System.out.println("请输入0-4的整数!超出操作范围");dm.notice();n=s.nextInt();break;
        }
        System.out.println("退出!");
    }
}


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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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