请老师帮助修改下。

请老师帮助修改下。

package imooc;


import java.util.Scanner;


public class DataManage {

 int[] intArray=new int[10];

 DataManage dm=new DataManage();

 int s;

 // 显示提示信息的方法

 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 int[] insertData(){

Scanner sc=new Scanner(System.in);

if (sc.nextInt()==0){ 

System.out.println("不能输入数字0,请重新输入");break;

}

else

 

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

intArray[i]=sc.nextInt();

}

return intArray[]; 

}

 

 

 

//显示数据的方法

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

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

System.out.print("数组元素为:" +intArray[i]+"");

dm.notice();

}

}

//查询能被3整除的数据

public divThree{

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

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

System.out.print("能被3整除的数据是" intArray[i]);

}

}

 

}

// 指定位置处插入数据

public void insertAtArray(int[]intArray){

int a,b;

System.out.println("请输入要插入的数据");

Scanner sc=new Scanner(System.in);

a=sc.nextInt();

System.out.println(" 请输入要插入的位置");

Scanner sc=new Scanner(System.in);

b=sc.nextInt();

for(int i = intArray.length-1;i > a;i--) 

        {

          intArray[i] = intArray[i-1];  

        }

  intArray[a] = b;


      System.out.println(Arrays.toString(intArray));

}

 

public static void main(String[]args){

dm.notice();

Scanner sc=new Scanner(System.in);

s=sc.nextInt();

switch(s){

case 0:

System.out.println("退出");

case 1:

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

     s.insertData();break;


case 2:

System.out.println("2-显示数据");

s. showData(int[]intArray, int length);break;

 

case 3:

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

s.insertAtArray(int[] intArray);break;

case 4:

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

s.divThree();break;

}

}

 }

}


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

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

1回答
好帮手慕阿满 2018-12-05 18:04:18

同学你好,对同学的程序修改如下:

语法方面:

1、notice()方法缺少“}”,需要加上。

2、insertData()中如果没有else语句,去掉else,return intArray,不需要[]。

3、该类的对象dm建议定义在主方法中,而显示数据的方法中不需要调用notice()方法。

4、查询能被3整除的数据的方法。方法定义:访问修饰符 +返回值类型+方法名+(参数列表)+方法体。同学的该方法缺少返回值类型和参数列表,即使参数列表为空,但是括号()不能省。

5、insertAtArray()方法中Scanner对象定义一个即可,另外不可重名。

6、insertAtArray()最后的输出语句没有作用还报错,建议去掉。

7、主方法中,该类的对象定义在主方法中。s变量在主方法中使用,也在主方法中定义。

8、case 0后退出程序可以使用System.exit(0);

9、调用该类中的方法应该用该类的对象dm调用,如dm.insertData()。

10、如果intArray数组在类中定义,要在主方法中使用,需要讲intArray数组定义为静态的。

11、最后多了一个“}”。

程序逻辑方法。

1、主方法中建议使用循环结构和switch-case结构,循环结构保证程序只有输入0才推出,输入其他数字则一直执行。如果输入的数字没有对应的操作,可使用default:输出提示。

2、插入数据的方法。在该方法中使用循环接收从键盘输入的数字,如果输入的数据为0,将i--,调用continue结束当前循环执行下次循环。

3、显示数据的方法要考虑两种情况,在指定位置插入数据前和后,,分别显示9个或10个数据,以保证不显示0。

4、查询能被3整除的数据的方法。当没有能被3整除的数据时,也要给出提示。

可参考如下代码:

public class DataManage {
	// 显示提示信息
	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 int[] insertData() {
		int[] arr = new int[10];
		arr[9] = 0;
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < 9; i++) {
			System.out.println("请输入第" + (i + 1) + "个数据:");
			int num = sc.nextInt();
			if (num == 0) {
				System.out.println("数据不合法,请输入非零的数!");
				i--;
				continue;

			}
			arr[i] = num;
		}
		return arr;
	}
	// 显示所有数据
	public void showData(int[] a, int length) {
		System.out.println("数组元素为:");
		for (int i = 0; i < length; i++) {
			System.out.print(a[i] + "  ");
		}
		System.out.println();
	}

	public void insertAtArray(int[] a, int n, int k) {
		if (a[a.length - 1] != 0) {
			System.out.println("数组存储空间已满!");
		} else {
			if (k == 9) {
				a[9] = n;
			} else {// 从插入位开始将数据整体后移
				for (int i = a.length - 2; i >= k; i--) {
					a[i + 1] = a[i];
				}
				a[k] = n;
			}
		}
	}
	// 查询能被3整除的数据
	public void divThree(int[] a) {
		boolean flag = false;
		System.out.println("能被3整除的数据为:");
		for (int n : a) {
			if (n % 3 == 0) {
				System.out.print(n + "  ");
				flag = true;// 如果查找成功设为true
			}
		}
		if (!flag) {// 若查找失败,输出提示信息
			System.out.println("没有找到能被3整除的数据!");
		}
		System.out.println();
	}

	public static void main(String[] args) {
		int[] arr = new int[10];
		int length = 9;// 执行选项1后设值为9,执行选项3后设值为10
		DataManage dm = new DataManage();
		Scanner sc = new Scanner(System.in);
		while (true) {
			dm.notice();
			int sel = sc.nextInt();
			switch (sel) {
			case 1:
				arr = dm.insertData();
				length = 9;// 执行选项1后设值为9
				break;
			case 2:
				dm.showData(arr, length);
				break;
			case 3:
				System.out.println("请输入要插入的数据:");
				int n = sc.nextInt();
				System.out.println("请输入要插入数据的位置:");
				int k = sc.nextInt();
				if (k < 0 || k > 9) {
					System.out.println("输入不合法,请输入0-9");
					break;
				}
				dm.insertAtArray(arr, n, k);
				length = 10;// 执行选项3后设值为10
				break;
			case 4:
				dm.divThree(arr);
				break;
			case 0:
				System.out.println("程序退出!");
				return;
			default:
				System.out.println("输入有误,请重新输入");

			}
		}

	}

}

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

  • for (int i = a.length - 2; i >= k; i--) { a[i + 1] = a[i]; } 这段代码有点不明白 为什么是长度减2?
    2019-01-03 21:47:25
  • 同学你好,在循环中为a[i+1]=a[i]表示将前一位数据赋值给后一位。a.length表示数组的长度,数组的下标是从0开始的,所以数组中最后一位应该是a[a.length-1],而a[i+1],如果i是a.length-1的话,就变成了a[a.length],数组下标越界,会报异常。所以这里 i 是从 a.length-2开始的,当i=a.length-2时,a[i+1]就表示数组中最后一个数据。祝:学习愉快~
    2019-01-04 09:54:38
  • 请问,在插入数据中的arr【9】=0什么意思啊
    2019-02-28 14:48:35
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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