急!在线等答案。运行下面的Java程序,为什么会出现越界提示。求哪位大神帮忙看一下。

import java.util.Scanner;
public class v10
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int[] numbers = new int[10];
System.out.print("Enter " + numbers.length + "个数:");
for (int i = 0;i < numbers.length ;i++ )
{
numbers[i] = input.nextInt();
}
java.util.Arrays.sort(numbers);
System.out.println(eliminateDuplicates(numbers));
}

public static int[] eliminateDuplicates(int[] numbers)
{
int a = 0;
for (int c = 0;c < numbers.length-1 ;c++ )
{
if (numbers[c] == numbers[c+1])
{
a++;
}
}
int[] num = new int[numbers.length-a];
for (int b =0;b < numbers.length-1 ; b++)
{
if (numbers[b] != numbers[b+1])
{
num[b] = numbers[b];
System.out.print(num[b] + " ");

}
if (b == 8)
{
num[9] = numbers[9];
System.out.print(num[9]);
}
}
return num;
}

}

同学. Scanner类接收系统输入的机制是监听到空格或者回车时即默认输入结束,
当你使用
for (int i = 0;i < numbers.length ;i++ )
{
numbers[i] = input.nextInt();
}

来接收系统输入时,请确保输入一个数字完成后键入一个回车,这样才能保证数据的正确,
如果你连续输入2次回车或者空格,引用数据类型会默认为空,基本数据类型则会不存在,数组中后续数字会补全至之前少的数字,所以当连续出现回车或空格时,会出现数组越界追问

那该如何改进呢?

追答

不用改进啊,你输入10个数字的时候不要多敲空格就行了,我不知到你这程序是干嘛的.不过我运行是没问题的.
只要输入一个数字敲一次空格,输入10个数字就会自动结束了

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-24
num[9] = number[9]上面的循环,到此都有问题

你这句有问题,因为你输入的数字如果出现一对相等的在此就会报错,你再前面
有把相同的给过滤掉,并重新声明的数组,并设置了去重后的大小。
当你再次调用时肯定会报错
这段代码在获取输入的时候最好判断下,否则问题多多
第2个回答  2013-12-24
逻辑好乱。
num 这个数组length<10,下面的对numbers循环,赋值就可能溢出。
第3个回答  2013-12-24
没有越界提示啊??追问

出现了这个

追答import java.util.Scanner;
public class v10 
{
public static void main(String[] args) 
{
Scanner input = new Scanner(System.in);
int[] numbers = new int[10];
System.out.print("Enter "  + numbers.length + "个数:");
for (int i = 0;i < numbers.length ;i++ )
{
numbers[i] = input.nextInt();
}
java.util.Arrays.sort(numbers);
            System.out.println(eliminateDuplicates(numbers));
          }

 public static int[] eliminateDuplicates(int[] numbers)
{
 int a = 0;
 for (int c = 0;c < numbers.length-1 ;c++ )
 {
 if (numbers[c] == numbers[c+1])
 {
 a++;
 }
 }
 int[] num = new int[numbers.length-a];
for (int b =0;b < num .length-1 ; b++)
{
if (numbers[b] != numbers[b+1])
{
       num[b]  = numbers[b];
System.out.print(num[b] + " ");

}
}
         return num;
}

}

追问

为什么出现这个?

追答

你这个程序要实现的是什么功能?

追问

使用下面的方法头:
public static int[] eliminateDuplicates(int[] numbers)
提示用户输入含十个数的数组,消除里面重复的数,重新输出。

追答import java.util.Scanner;
public class v10{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] numbers = new int[10];
System.out.print("Enter " + numbers.length + "个数:");
for (int i = 0; i < numbers.length; i++) {
numbers[i] = input.nextInt();
}
java.util.Arrays.sort(numbers);
eliminateDuplicates(numbers);
//System.out.println(eliminateDuplicates(numbers));
}

public static int[] eliminateDuplicates(int[] numbers) {
int a = 0;

for (int c = 0; c < numbers.length - 1; c++) {
if (numbers[c] == numbers[c + 1]) {
a++;
}
}
int[] num = new int[numbers.length - a];
for (int b = 0,i = 0; b < numbers.length - 1; b++) {

if (numbers[b] != numbers[b + 1]) {
num[i++] = numbers[b];
System.out.print(numbers[b] + " ");

}
if(b==8){
num[i++] = numbers[b+1];
System.out.print(numbers[b+1] + " ");
}
}
return num;
}
}

相似回答