问题:编写一个读取实数列表的程序。程序结束后,它应该只打印出唯一的数字。也就是说,只有列表中出现一次的数字。如果列表中有超过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;
final int MAX_SIZE = 50;
double[] numbersArray = new double[MAX_SIZE];
while (input.hasNextDouble() && n<MAX_SIZE){
double in = input.nextDouble();
if (!inList(in,numbersArray)){
numbersArray[n]=in;
n++;
}
}
double[] uniqueArray = Arrays.copyOfRange(numbersArray, 0, n);
printReport(uniqueArray);
}
public static boolean inList(double number, double[] list){
for (double i : list)
{
if (Math.abs(i-number) <0.00000000001){
return true;
}
}
return false;
}
public static void printReport(double[] list)
{
System.out.println("The unique numbers were");
System.out.println(Arrays.toString(list));
}
}
它运行良好,但我似乎无法弄清楚我的逻辑出错了。我正在对5 6 7 8 9 0 9 8 0的input.txt运行它,我的输出是
The unique numbers were
[5.0, 6.0, 7.0, 8.0, 9.0]
我的室友和我似乎无法确定我的问题。我认为我已经解决了可能造成的每一个错误,但是再次计算机更擅长做你告诉他们做的事情而不是你想要他们做什么。如果有人能够指出我的问题,并告诉我如何解决它,我将永远感激。谢谢你的时间。
答案 0 :(得分:2)
您在中添加数字<而不是寻找唯一数字。这就是区别。 (顺便说一句:0.0
不在输出中的原因是因为默认情况下数组中充满了零。)
基本上你应该这样:
检查元素是否唯一可以简单地通过再次循环遍历整个列表中该元素的出现来完成。
答案 1 :(得分:2)
(只是问题的一部分,抱歉。其余的见其他答案)
数组在创建时填充零,因此零将始终为inList
。您可以将该函数更改为仅通过添加列表长度的参数来检查实际设置的值:
public static boolean inList(double number, double[] list, int n){
for (int i = 0; i < n; i++)
if (Math.abs(line[i] - number) < 0.00000000001)
return true;
return false;
}
BTW:您还可以使用ArrayList<Double>
或HashSet<Double>
来处理变量数组。