关于8-2作业"在指定位置处插入数据"的功能的定义方法疑问。

关于8-2作业"在指定位置处插入数据"的功能的定义方法疑问。

package com.imooc;

import java.util.Scanner;

public class ArrayOperationDemo {
	private static Scanner sc;

	// 插入数据
	public int[] insertData() {
		int[] a = new int[10];
		sc = new Scanner(System.in);
		// 从键盘接收数据,为数组元素赋值,下面length后面减1的原因是控制只给数组9个元素赋值。
		for (int i = 0; i < a.length - 1; i++) {
			System.out.println("请输入第" + (i + 1) + "个数据;");
			a[i] = sc.nextInt();
			// 防止插入数值为0的数据
			while (a[i] == 0) {
				System.out.println("插入数据的的值不能为0,请重新赋值:");
				a[i] = sc.nextInt();
			}

		}
		return a;

	}

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

		}
		System.out.println();
	}

	// 在指定位置处插入数据,参数n为要插入的数据,参数k为要插入的位置,参数k插入位置与数组下标一致。
	public void insertAtArray(int[] a, int n, int k) {
		int b=a.length;
		System.out.println(b);
		if(k<b){
			for(;b>k;b--){
				a[b]=a[b-1];
		}
			a[k] = n;
		}
		else{
			a[k] = n;
		}
			
		

	}

	// 查询能被3整除的数据
	public void divThree(int[] a) {
		int sum = 0;
		String text = "";
		// 遍历数组寻找能被3整除又不为0的数组元素
		for (int i : a) {
			if (i % 3 == 0 & i != 0) {
				sum++;
				text = text + i + "  ";

			}

		}
		// 如果sum大于0说明数组中有能被3整除的元素
		if (sum > 0) {
			System.out.print("数组中能被3整除的元素为:" + text);
		}
		// 如果sum等于0说明数组没有被3整数的元素
		if (sum == 0) {
			System.out.print("没有符合能被3整除的数据");
		}
		System.out.println();
	}

	// 显示提示信息的方法
	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) {
		// 定义一个类,对数组中的数据进行管理。
		ArrayOperationDemo array = new ArrayOperationDemo();
		// 输出提示信息
		array.notice();
		int s = 1;
		int[] arr = new int[11];
		while (s == 1) {
			// 等待用户输入数字选择
			sc = new Scanner(System.in);
			int i = sc.nextInt();
			switch (i) {

			case 1:
				arr = array.insertData();
				array.showData(arr, arr.length);
				break;

			case 2:
				array.showData(arr, arr.length);
				break;

			case 3:
				System.out.println("请输入要插入的数据:");
				// Scanner sc=new Scanner(System.in);
				int n = sc.nextInt();
				System.out.println("请输入要插入数据的位置:");
				int k = sc.nextInt();
				// 防止数组下标越界。
				while (k > arr.length) {
					System.out.println("要插入数组的位置存在数组下标越界问题,请重新输入:");
					k = sc.nextInt();
				}
				array.insertAtArray(arr, n, k);
				array.showData(arr, arr.length);
				break;

			case 4:
				array.divThree(arr);
				break;

			case 0:
				s = 0;
				System.out.println("退出程序");
				break;

			default:
				System.out.println("数字输入有误,请重新输入");
			}

			if (s == 0) {
				// 如果用户输入的数字为0,结束while循环。达到终止程序的目的。
				break;
			} else {
				array.notice();
			}

		}

	}

}

因为在批改作业后老师说插入指定的方法写错了,在插入方法insertAtArray中我用代码实现了这个功能,但是运行到这里的时候一直报错数组越界,我调试了2个多小时依然没有找到原因,希望老师能够指出到底是哪里出现了问题?

http://img1.sycdn.imooc.com/climg//59144c8300012c8c08480224.jpg

正在回答

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

1回答

在指定位置处插入数据的方法中 int b=a.length;这条语句改为: int b=a.length-1;这样后面在使用a[b]时就不会发生数组下标越界的错误了。改后程序是没问题的。祝学习愉快!

  • 慕用0757483 提问者 #1
    感谢指点,我一直忽略了这个问题,花了两个小时也没有发现如果下标为10的时候其实是第11个成员数。
    2017-05-11 21:38:08
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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