Java程序:哪里出了问题?
问题:编写一个读取实数列表的程序。程序结束后,它应该只打印出唯一的数字。也就是说,只有在列表中出现一次的数字。如果列表中有50个以上的唯一编号,则只应打印前50个Java程序:哪里出了问题?,java,arrays,if-statement,while-loop,Java,Arrays,If Statement,While Loop,问题:编写一个读取实数列表的程序。程序结束后,它应该只打印出唯一的数字。也就是说,只有在列表中出现一次的数字。如果列表中有50个以上的唯一编号,则只应打印前50个 import java.util.*; import java.io.*; import java.util.Arrays; public class Hmwk { public static void main(String[] args) throws FileNotFoundException { Scanner
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));
}
}
我和我的室友似乎无法确定我的问题。我想我已经解释了可能犯的每一个错误,但是再说一次,计算机更擅长做你让他们做的事情,而不是你想让他们做的事情。如果有人能指出我的问题并告诉我如何解决它,我将永远感激。谢谢您的时间。您只需将数字添加到列表中一次,而不是查找唯一的数字。这就是区别。顺便说一句:0.0不在输出中的原因是因为默认情况下数组中充满了零
基本上你应该有:
读取数组中的所有数字。
检查列表中的每个数字,并检查其是否唯一。
如果是,则将其添加到最终数组中。
检查一个元素是否唯一,只需在整个列表中再次循环计算该元素的出现次数即可。您将向列表中添加一次数字,而不是查找唯一的数字。这就是区别。顺便说一句:0.0不在输出中的原因是因为默认情况下数组中充满了零
基本上你应该有:
读取数组中的所有数字。
检查列表中的每个数字,并检查其是否唯一。
如果是,则将其添加到最终数组中。
检查一个元素是否唯一,只需通过再次循环计算该元素在整个列表中的出现次数即可。抱歉,这只是问题的一部分。其余的请参见其他答案 数组在创建时用零填充,因此零将始终在列表中。通过添加列表长度的参数,可以将该函数更改为仅检查实际设置的值:
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;
}
顺便说一句:您也可以使用ArrayList或HashSet来处理可变数组大小。抱歉,这只是问题的一部分。其余的请参见其他答案 数组在创建时用零填充,因此零将始终在列表中。通过添加列表长度的参数,可以将该函数更改为仅检查实际设置的值:
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;
}
顺便说一句:你也可以使用ArrayList或HashSet来处理可变的数组大小。为什么你要使用inList中<0.000000000001的if语句来检查数字是否在列表中?Mdewitt:这是为了处理整数->双精度,教授告诉我的。那么确切的问题是什么?没有0.0?泰勒-它们都是整数。例如5 6 7等,在添加之前,您要检查每个数字是否在列表中。因此,您将始终添加每个数字的第一个实例。你需要重新考虑你的算法。为什么你要用inList中<0.000000000001的if语句来检查这个数字是否在列表中?Mdewitt:这是为了处理整数->双精度,教授告诉我的。那么确切的问题是什么?没有0.0?泰勒-它们都是整数。例如5 6 7等,在添加之前,您要检查每个数字是否在列表中。因此,您将始终添加每个数字的第一个实例。你需要重新考虑你的算法。不解决8和9被输出的问题不解决8和9被输出的问题。如果数组已经包含给定的数字,则不会将数字添加到数组中,这正是inList的用途。所以数组将只包含除0之外的唯一数字。我知道,这就是我告诉他的。为什么会有这么多的反对票?这是正确的答案。他只想选择唯一的数字。他不想让每个数字在最终结果中出现一次。@Njol数组将包含唯一的数字,但它不会只包含输入中唯一的数字。这个答案解决了这个问题。如果数组已经包含inList所使用的给定数字,则不会向数组中添加数字。所以数组将只包含除0之外的唯一数字。我知道,这就是我告诉他的。为什么会有这么多的反对票?这是正确的答案。他只想选择唯一的数字。他不想让每个数字在最终结果中出现一次。@Njol数组将包含唯一的数字,但它不会只包含输入中唯一的数字。这个答案解决了这个问题。