2016-09-19 37 views
-1

我想從用戶輸入的文件中找到浮點列表中最小的數字,而不使用任何數組,但我似乎無法弄清楚如何去做。這是我目前的,但它根本不起作用。任何幫助將不勝感激,請隨時編輯短語。如何在不使用任何數組的情況下找到浮點列表中的最小數字?

import java.io.File; 
import java.util.Scanner; 

public class Excercise3 { 

    public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Enter the file name: "); 
    String filename = sc.next(); 
    File myFile = new File(filename); 

    String myString; 
    float incumbant = 0; 
    float secondPlace = 0; 
    float counter = 0; 

    try { 

     Scanner myScanner = new Scanner(myFile); 
     myScanner.nextLine(); 

     //while(myScanner.hasNextFloat()) 
     //{ 
     counter = myScanner.nextFloat(); 
     if (counter == 47.83) { 
     System.out.println("The top qualifier is: " + counter); 
     } else { 
     counter++; 
     } 
     //System.out.println(myString); 

     // } 

     myScanner.close(); 
     sc.close(); 
    } catch (Exception e) { 
     System.out.println("File not found."); 
    } 
    } 
} 
+0

你看過可能的清單嗎? https://docs.oracle.com/javase/7/docs/api/java/util/List.html –

+1

什麼是'incumbant'和'secondPlace'?我認爲你在正確的軌道上,但需要找出循環。 'if(counter == 47.83)'是什麼,這個數字從哪裏來? – Linus

+0

你爲什麼要使用數組? – shmosel

回答

1

只記錄最低的數字。如果下一個數字更低,那麼它是新的最低。除了一個浮點變量外,您不需要任何存儲。

0

你可以寫:

float min; 
if (myScanner.hasNextFloat()){ 
    min=myScanner.nextFloat();; 
} 
while(myScanner.hasNextFloat()) 
{ 
    counter = myScanner.nextFloat(); 

    if (counter<min) {min = counter}; 

    if (counter == 47.83) { 
    System.out.println("The top qualifier is: " + counter); 
    } else { 
    counter++; 
    } 
    //System.out.println(myString); 

} 
+0

我沒有downvote,但是'min'的範圍有問題。 – Linus

0

需要初始化你的計數器Float.MAX_VALUE和每次數大於當前計數器較小更換。

float newNumber = myScanner.nextFloat(); 
if(newNumber < counter) { 
    counter = newNumber; 
} 

最後最小的數字是 - > counter。

+0

'Float.MAX_VALUE'是好的,如果你實際上有浮動,但如果文件是空的,它看起來像是無論如何發現最低。 – Linus

+0

然後,您可能必須使用標記進行最終驗證,以確定該文件是否至少有一個數字。 –

0

訣竅是在掃描文件的同時保持跟蹤最低數字(使用List或其他數據結構作爲評論者建議可能只隱藏數組 - 取決於實現)。你的代碼應該使用你已經註釋掉的while循環。如果您的最小值從正無窮大開始,那麼您不需要爲第一個浮點值單獨執行一個步驟。該心臟您的代碼將是這樣的(雖然我承認我在做什麼counter是假設一些假設做,消除神祕47.83):

float min = Float.POSITIVE_INFINITY; 
float temp; 
int counter = 0; 

try { 
    Scanner myScanner = new Scanner(myFile); 
    myScanner.nextLine(); //Are you sure you want to skip the first line? 

    while(myScanner.hasNextFloat()) { 
     temp = myScanner.nextFloat(); //get next float 
     if(temp<min) min=temp;  //keep smallest float so far 
     counter++;     //count floats checked 
    } 

    myScanner.close(); 
    sc.close(); 
} catch (Exception e) { 
    System.out.println("File not found."); 
} 

最後,counter是彩車的數量,您已經檢查並且min是最小的浮點數。如果你沒有漂浮物,min將是正無窮。