2016-09-16 103 views
0

我一直在檢查StackOverflow一段時間,現在終於到了我註冊的時間。我在網站上找不到我的問題,所以我想我會自己提問。我在下面複製了我的代碼。 我正在爲一個學校任務做這件事。它做它應該做的一切(找到第二小的數字),但是,輸出不是我想要的。我曾嘗試將out.printf語句放在其他地方,但它不起作用。首先會發生的情況是,前兩個數字會自動分配給smallestNumber和secondSmallestNumber,分配表示輸入的第一個數字總是小於第二個數字。之後,它進入循環並比較所有數字。最後它應該打印出最後一個小數目。但它只是打印所有。我已經嘗試了幾件事,我無法得到這個權利。請幫我嗎?只顯示循環的最後一次迭代

EDIT : teaching assistant told me I can't submit my assignments online in the event of fraud. So I'm sorry have to delete this code. 
+0

'secondSmallestNumber'是'while'循環意味着它是無界只在循環存在,這意味着你可以在外面打印它的價值之外定義(即後循環),它會給你預期的結果。它只會打印一次,因爲它不會在循環中。 – px06

+0

我已經得到了3個相同的答案,雖然我明白你們都在談論它,但這不起作用。你能進一步幫助我嗎? – PilotoLoco

回答

1

正如其他人所提到的那樣 - 您應該將印刷移到循環之外。同樣在最後,您還會撥打flush您的printstream。所以,試試這個:

package module2; 

    import java.io.PrintStream; 
    import java.util.Scanner; 

    public class SecondSmallest { 

     PrintStream out; 

     SecondSmallest() { 
      out = new PrintStream(System.out); 
     } 

     void start() { 
      Scanner in = new Scanner(System.in); 
      out.printf("%s", "Enter multiple numbers divided by a space and close with Enter: "); 
      int newNumber; 
      int smallestNumber = in.nextInt(); 
      int secondSmallestNumber = in.nextInt(); 

      while (in.hasNext()) { 
       newNumber = in.nextInt(); 

       if (newNumber < smallestNumber) { 
        secondSmallestNumber = smallestNumber; 
        smallestNumber = newNumber; 

       } 
      } 
     //moved here to print only once 
      out.printf("%s%d\n", "The second smallest number is : ", secondSmallestNumber); 
     //flush output stream 
      out.flush(); 
     } 


     public static void main(String[] argv) { 
      new SecondSmallest().start(); 
     } 
+0

謝謝!我會發現什麼沖洗。但它的工作 – PilotoLoco

2

要重複執行某些操作,請將其放入循環中。因此,到不是重複做,把它以外的的循環。

+0

你能告訴我究竟在哪裏嗎?我試圖把它放在幾乎每一行,主要是控制檯只是不給任何反饋以外的任何反饋 – PilotoLoco

1

在while循環之外移動out.printf("%s%d\n", "The second smallest number is : ", secondSmallestNumber);

+0

問題是,控制檯什麼也沒有顯示。 – PilotoLoco

相關問題