关于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个多小时依然没有找到原因,希望老师能够指出到底是哪里出现了问题?

23
收起
正在回答
1回答
在指定位置处插入数据的方法中 int b=a.length;这条语句改为: int b=a.length-1;这样后面在使用a[b]时就不会发生数组下标越界的错误了。改后程序是没问题的。祝学习愉快!
Android零基础入门2018版
- 参与学习 人
- 提交作业 5461 份
- 解答问题 7235 个
此次推出的专题为Android攻城狮培养计划的第一部分语法与界面基础篇,将带大家从0开始学习Android开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星