[英]Java Program: Where am I going wrong?
問題:編寫一個讀取實數列表的程序。 程序結束后,應僅打印出唯一編號。 即,僅數字在列表中出現一次。 如果列表上有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.0
,是因為默認情況下該數組充滿了零。)
基本上,您應該有:
只需循環遍歷整個列表,即可計算整個列表中該元素的出現次數,從而輕松檢查元素是否唯一。
(僅部分問題,對不起。請參見其他答案)
數組在創建時會用零填充,因此inList
始終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;
}
順便說一句:您也可以使用ArrayList<Double>
或HashSet<Double>
來處理可變數組的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.