2013-04-13 27 views
-2

我一直在做這個任務幾周,需要一些幫助。請不要將我引用到JavaDocs,因爲我已經無數次地檢查了它們,並且無法找到我的程序的解決方案。 這是我需要做的:創建一個ArrayList購物清單並在表中顯示結果

  1. 根據用戶鍵入的輸入一次一個地添加項目到ArrayList。系統會提示用戶將字符串存儲在ArrayList中,然後按回車鍵。用戶將能夠繼續添加項目到ArrayList,直到他們只需輸入而不輸入任何內容。

一旦用戶執行此(命中而無需鍵入任何輸入),則程序將顯示所有該ArrayList的元素,兩者的索引和字符串值,在表中。它會做到這一點通過單循環

這是代碼,我到目前爲止有:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Scanner; 
import java.util.ArrayList; 

// declares a name for the class 
public class GroceryList2 { 
    /** 
    * Allows the program to be run and throws the Input-Output exception 
    * error 
    */ 
    public static void main(String[] args) throws IOException { 
     BufferedReader userInput = 
      new BufferedReader(new InputStreamReader(System.in)); 
     Scanner in = new Scanner(System.in);//allows for input 
     // declares the ArrayList to be a String 
     ArrayList<String> myArr = new ArrayList<String>(); 
     myArr.add("Milk"); 
     myArr.add("Cheese"); 
     myArr.add("Eggs"); 
     myArr.add("Bread"); //the values of the ArrayList already entereed 
     // the loop that allows the criteria to run 
     while(true) { 
      if(myArr.isEmpty()== false) { 
       System.out.println("Enter the items for the grocery list: "); 
       String item = in.next();//asks and allows for input 
       myArr.add(item); 
      } 
      else if(myArr.isEmpty()== true) { 
       for (int i=0; i<myArr.size(); i++) { 
       // displays the list after the input 
       System.out.print(
        "The Grocery List "+ i+ ": "+ myArr.get(i)); 
       } 
      } 
     } 
    } 
    } 

代碼編譯,但是當我剛按下回車鍵,不顯示購物清單,它等待另一個條目。

+1

您將元素添加到列表中,然後您驚訝列表不是空的? – WilQu

+1

歡迎來到StackOverflow。在這裏傾銷你的代碼,尤其是家庭作業,並問「出了什麼問題?」通常沒有生產力,也不是每個FAQ的有效問題。如果你對爲什麼你的代碼沒有做到你期望的那樣感到困惑,那麼調試器是一個很好的開始。 –

+2

我覺得有趣的是,這應該是一個可以幫助人們的論壇,然而很多人似乎都認爲這些人是優秀的。我尋求幫助,因爲我花了數小時甚至數週時間,無法找到所需的解決方案。我嘗試過改變代碼的方式,因爲我知道怎麼做,查看了所有的文檔,但我不明白,因此我在尋求幫助。爲了將來的參考,這個作業實際上並不是爲了任何功勞,而是爲了我自己的知識,如果你不會幫助那很好,但是你也可能只是沒有回答。 –

回答

0

更改if條件中的條件,只需交換它們。 Ørbetter做

if(myArr.isEmpty()) 

提高再詮釋,他的第二

if(!myArr.isEmpty()) 
+0

謝謝。正如我想生成列表,如果myArr的字符串是空的,我應該使用.equals? –

+0

@CeceNichole isEmpty返回一個布爾值,所以你不需要任何東西,除了我在答案中寫的東西。是的,使用.equals()來比較任何非原始的東西 – NimChimpsky

+0

當我這樣做時,如果沒有輸入任何內容,它仍然不允許顯示列表,如果我添加一箇中斷,那麼在我添加一個值後立即顯示列表,如果我沒有添加一箇中斷,循環運行並繼續詢問爲該lis添加的項目噸,但當我只是按下輸入,它仍然等待一個條目,並不顯示列表。 –

0

@Cece裏面的while循環,你實際上並沒有做什麼,你應該以服務你的目的。

首先,在每次迭代的條件myArr.isEmpty()== false將被驗證(因爲你myArr陣列是從來沒有空的,因爲你已經進入while循環之前填充它),這樣的代碼的執行會一直去同條件分支。正如一個側面說明,你可以這樣寫得更優雅:!myArr.isEmpty

其次,您正在從用戶那裏讀取字符串,但所做的只是將它們添加到數組中。由於else分支從未到達,數組的內容永遠不會被轉儲。正如附註一樣,else語句後面的if語句是多餘的。你可以安全地刪除它。

第三,你的代碼的問題是你永遠不會檢查用戶輸入是否爲空。相反,你檢查的是雜貨數組是否爲空。

這是我會寫的while循環:

while(true){ 
    String item = in.next(); 
    if(item.isEmpty()){ 
     System.out.println("The Grocery List: "); 
     for(int i=0; i<myArr.size(); i++) { 
      System.out.println(i + ": "+ myArr.get(i)); 
     } 
     break; 
    } 
    else{ 
     myArr.add(item); 
    } 
} 

讓我知道如果你不明白我的代碼任何部分。

相關問題