【发布时间】:2014-03-01 02:54:56
【问题描述】:
问题:编写一个读取实数列表的程序。程序结束后,它应该只打印出唯一的数字。也就是说,只有在列表中出现一次的数字。如果列表中的唯一编号超过 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]
我和我的室友似乎无法确定我的问题。我认为我已经解释了可能犯的每一个错误,但是计算机更擅长做你告诉他们做的事情,而不是你想让他们做的事情。如果有人能查明我的问题并告诉我如何解决它,我将永远感激不尽。感谢您的宝贵时间。
【问题讨论】:
-
你为什么在 inList 中使用
-
Mdewitt:它是为了处理整数-> 双精度数,教授告诉我的。
-
那么具体的问题是什么?没有
0.0? -
Tyler- 它们都是整数。如 5 6 7 等
-
您在添加之前检查每个号码是否在列表中。因此,您将始终添加每个数字的第一个实例。你需要重新考虑你的算法。
标签: java arrays if-statement while-loop