Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java程序:哪里出了问题?_Java_Arrays_If Statement_While Loop - Fatal编程技术网

Java程序:哪里出了问题?

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

问题:编写一个读取实数列表的程序。程序结束后,它应该只打印出唯一的数字。也就是说,只有在列表中出现一次的数字。如果列表中有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));

}


}
我和我的室友似乎无法确定我的问题。我想我已经解释了可能犯的每一个错误,但是再说一次,计算机更擅长做你让他们做的事情,而不是你想让他们做的事情。如果有人能指出我的问题并告诉我如何解决它,我将永远感激。谢谢您的时间。

您只需将数字添加到列表中一次,而不是查找唯一的数字。这就是区别。顺便说一句: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数组将包含唯一的数字,但它不会只包含输入中唯一的数字。这个答案解决了这个问题。