数组下标越界问题,
在指定位置插入数据的时候总提示数组下标越界输入9报错,但是输入8就把原来的9替换成10了:
package com.imooc;
import java.util.Scanner;
public class ArrayManage {
//插入数据
public int[] insertData() {
int[] arr = new int[9];
Scanner sc = new Scanner(System.in);
for(int i=0;i<arr.length;i++) {
System.out.println("请输入第"+ (i+1) + "个数据:");
int a = sc.nextInt();
if(a>0){
arr[i] = a;
}else{
System.out.println("请输入正整数!");
break;
}
}
return arr;
}
//显示数据
public void showData(int[] arr) {
//定义数组
System.out.println("数组元素的内容为: ");
for(int i = 0; i<arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
//在指定位置处插入数据
public void insertAtArray(int[] a , int n, int k){
Scanner sc = new Scanner(System.in);
System.out.println("请输入插入的数字: ");
n = sc.nextInt();
System.out.println("请输入要插入数字的位置: ");
k = sc.nextInt();
for(int i=(a.length-1);i>=k;i--) {
a[i] = a[i-1];
}
a[k] = n;
}
//查询能被3整除的数据
public void divThree(int[] a){
//a = insertData();
System.out.println("能被3整除的数据为:");
for(int i=0;i<a.length;i++) {
if(a[i]%3==0) {
System.out.print(a[i] + " ");
}
}
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("*************************");
}
public static void main(String[] args) {
boolean flag = true;
ArrayManage am = new ArrayManage();
int a[] = new int[10];
// 循环输出操作数组的提示信息
while(flag){
//循环调用提示
am.notice();
System.out.println("请输入对应数字进行操作: ");
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
switch(m){
case 1:
//执行1对应的插入数据
a = am.insertData();
am.showData(a);
break;
case 2:
//执行2对应的显示数组的操作
am.showData(a);
break;
case 3:
//执行3对应的在指定位置插入数据的操作
am.insertAtArray(a, m, m);
am.showData(a);
break;
case 4:
//执行4对应的输出数组中能被三整除的数
am.divThree(a);
break;
case 0:
//退出程序
flag = false;
System.out.println("退出程序!");
break;
}
}
}
}
正在回答
1、在insertData方法中,将数组长度修改为10,同时,为了保证只插入9个数据,需要将for循环判断条件修改为arr.length-1。
2、在insertAtArray方法中,for循环的初始值应该是i=a.length-1,而不是i=a.length。
package com.imooc;
import java.util.Scanner;
public class ArrayManage {
//插入数据
public int[] insertData() {
int[] arr = new int[9];
Scanner sc = new Scanner(System.in);
for(int i=0;i<arr.length;i++) {
System.out.println("请输入第"+ (i+1) + "个数据:");
int a = sc.nextInt();
if(a>0){
arr[i] = a;
}else{
System.out.println("请输入正整数!");
break;
}
}
return arr;
}
//显示数据
public void showData(int[] arr) {
//定义数组
System.out.println("数组元素的内容为: ");
for(int i = 0; i<arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
//在指定位置处插入数据
public void insertAtArray(int[] a , int n, int k){
Scanner sc = new Scanner(System.in);
System.out.println("请输入插入的数字: ");
n = sc.nextInt();
System.out.println("请输入要插入数字的位置: ");
k = sc.nextInt();
for(int i=a.length;i>k;i--) {
a[i] = a[i-1];
}
a[k] = n;
}
//查询能被3整除的数据
public void divThree(int[] a){
//a = insertData();
System.out.println("能被3整除的数据为:");
for(int i=0;i<a.length;i++) {
if(a[i]%3==0) {
System.out.print(a[i] + " ");
}
}
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("*************************");
}
public static void main(String[] args) {
boolean flag = true;
ArrayManage am = new ArrayManage();
int a[] = new int[10];
// 循环输出操作数组的提示信息
while(flag){
//循环调用提示
am.notice();
System.out.println("请输入对应数字进行操作: ");
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
switch(m){
case 1:
//执行1对应的插入数据
a = am.insertData();
am.showData(a);
break;
case 2:
//执行2对应的显示数组的操作
am.showData(a);
break;
case 3:
//执行3对应的在指定位置插入数据的操作
am.insertAtArray(a, m, m);
am.showData(a);
break;
case 4:
//执行4对应的输出数组中能被三整除的数
am.divThree(a);
break;
case 0:
//退出程序
flag = false;
System.out.println("退出程序!");
break;
}
}
}
}
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星