【发布时间】:2014-02-04 22:59:31
【问题描述】:
编写一个读取实数列表的程序。程序结束后,它应该只打印出唯一的数字。也就是说,只有在列表中出现一次的数字。如果列表中有超过 50 个唯一编号,那么您应该只打印前 50 个。 代码:
import java.util.*;
import java.io.*;
import java.util.Arrays;
public class Hmwk {
public static void main(String[] args) throws FileNotFoundException {
Scanner input=new Scanner (new File ("input.txt"));
int n = 0;
double[] numbersArray = new double[100000];
while (input.hasNextDouble()){
double in = input.nextDouble();
numbersArray[n]=in;
n++;
}
Arrays.sort(numbersArray);
inList(numbersArray);
double[] uniqueArray = Arrays.copyOfRange(numbersArray, 0, n);
printReport(uniqueArray);
}
public static double[] inList(double[] list){
int position = 0;
final int MAX_SIZE = 50;
double [] uniqueArray = new double[MAX_SIZE];
for (int i = 0; i < list.length; i++){
for (int j = 1; j < list.length; j++){
if (list[i] != list[j]){
uniqueArray[position]= i;
position++;
}
}
}
return uniqueArray;
}
public static void printReport(double[] list)
{
System.out.println("The unique numbers were");
System.out.println(Arrays.toString(list));
}
}
在创建一个新算法并再次阅读我的书后,我想出了上面的代码来解决顶部解释的问题。我试图对从 input.txt 中引入的数组中的所有数字进行排序。然后我尝试使用 inList 比较数字的索引。我试图让它比较索引 [0] 和 [1]、[1] 和 [2],等等。作为一个排序列表,如果被比较的索引处的数字相等,则它不是列表的唯一编号,但如果它们不同,则它们是唯一编号并添加到 uniqueArray。但是,当我运行它时出现以下错误。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50
at Hmwk.inList(Hmwk.java:33)
at Hmwk.main(Hmwk.java:20)
对我有什么想法吗?和往常一样,我非常感谢您的宝贵时间。
【问题讨论】:
-
list是一个包含 50,000 个元素的数组,您从0循环到list.length,但uniqueArray仅包含 50 个元素。所以,是的,你会碰到一个超出范围的数组索引。 -
如何从 [0] 循环到列表中的最后一个 double 而不是 0.0?
-
那么,如果您有一个包含 10,000 个
3的列表,后跟不同的数字,您的程序是否应该找到所有不同的数字?或者,它只会返回 3?我不清楚这项任务。
标签: java arrays sorting for-loop indexing