2017-06-26 30 views
1

我在java中工作,我希望我的循環運行只要有用戶指定的項目。截至目前,代碼貫穿一次迭代,並讀取一個循環的結果,但不會再繼續。多個項目的Java循環

如果用戶說有3個項目,我希望代碼遍歷循環3次並告訴我每個項目的總數。眼下,它告訴我總數1個項目我是否指定的項目的數量爲1或5

double projectBoardFootage = 1.0; 
    double projectBoardFootageTotal = 0.0; 
    int i = 0; 

    System.out.println("How many projects do you want to estimate?"); 
    int numberOfProjects = scan.nextInt(); 


    for(i = 0; i < numberOfProjects; ++i) { 
     while (projectBoardFootage > 0) { 
      System.out.println("Enter your board footage for Project #" + (i + 1) + " (0 to exit)"); 
      projectBoardFootage = scan.nextDouble(); 
      projectBoardFootageTotal += projectBoardFootage; 
     } 
     System.out.println("The raw board footage for Project #" + (i + 1) + " is: " + projectBoardFootageTotal); 
    } 
+1

當你進入循環時,你的代碼並不顯示'projectBoardFootage'是什麼。看看[MCVE]並[問] – pvg

+0

我對你對項目數量的定義感到困惑......你是什麼意思?「它告訴我總共有1個項目是否指定項目數量是1或5 「? –

+0

因此,當我運行該程序並被「有多少項目需要估計?」提示時,我可以輸入任何正整數,並且我的循環只運行一次,而不是我輸入的次數。 –

回答

0

也許你想重新初始化整個棋盤鏡頭以清除以前的迭代計數?

for(i = 0; i < numberOfProjects; ++i) { 
    projectBoardFootageTotal = 0.0; 
    while (projectBoardFootage > 0) { 
     System.out.println("Enter your board footage for Project #" + (i + 1) + " (0 to exit)"); 
     projectBoardFootage = scan.nextDouble(); 
     projectBoardFootageTotal += projectBoardFootage; 
    } 
    System.out.println("The raw board footage for Project #" + (i + 1) + " is: " + projectBoardFootageTotal); 
} 
+0

重新初始化projectBoardFootage,以及總計,最終爲我工作。 –

0

在你的代碼的問題是,你使用的變量projectBoardFootage終止循環。 想想當這個值設置爲0時會發生什麼。 我們退出while循環,並且該值永遠不會再被更改。所以從那時起,每一次迭代都會立即結束。

更好的解決辦法是做這樣的事情:

public static void main(String[] args) 
{ 
    Scanner scan = new Scanner(System.in); 
    System.out.println("How many projects do you want to estimate?"); 
    int numberOfProjects = scan.nextInt(); 

    for(int i = 0; i < numberOfProjects; ++i) { 
     foobar(scan, i+1); 
    }   
} 

private static void foobar(Scanner scan, int projectNr) 
{   
    boolean wantsToQuit = false; 
    double projectBoardFootageTotal = 0; 
    while (!wantsToQuit) { 
     System.out.println("Enter your board footage for Project #" + projectNr + " (q to exit)"); 
     String tmp = scan.next(); 
     if(tmp.equalsIgnoreCase("q")) 
      wantsToQuit = true; 
     else 
      projectBoardFootageTotal += Double.parseDouble(tmp); 
    } 
    System.out.println("The raw board footage for Project #" + projectNr + " is: " + projectBoardFootageTotal);   
} 

此代碼還可以確保用戶輸入一個更明智的鍵碼不是「0」退出。