2014-01-31 82 views
0

我正在嘗試解決這個問題,但無法解決它。請告訴我我做錯了什麼,並告訴我如何解決它?謝謝。java中的數組列表

現在的問題是:

寫方法stutter這需要一個字符串ArrayList和一個整數k作爲參數,並替換每個字符串與字符串k副本。例如,如果該列表在調用方法之前存儲值["how", "are", "you?"],並且k爲4,則應在方法結束執行後存儲值["how", "how", "how", "how", "are", "are", "are", "are", "you?", "you?", "you?", "you?"]。如果k是0或負數,那麼在呼叫後列表應該是空的。

我的代碼:

public static void stutter(ArrayList<String> list,int k) { 
    String s = ""; 
    for(int i = 0; i<list.size(); i++) { 
     s = list.get(i); 
    } 
    for(int j = 0; j < k; j++) { 
     list.add(j,s); 
    } 
} 
+0

歡迎使用stackoverflow,你可以嘗試改進你的代碼的格式:) –

回答

4

嗯...有兩件事是這裏錯了:

  • 你不返回任何東西,這是一個有點問題的,如果你想找回修改列表而不更改/銷燬您的原始數據。
  • 你的循環沒有做任何有意義的事情。第一個循環只會給你列表中的最後一個元素,然後你只添加k次。絕對是最好的不是你想要什麼。

我不會放棄整個事情,因爲這是一個練習你的,但這裏的一些建議:

  • 創建您自己的ArrayList<String>,而不是返回String變量。您還將聲明返回ArrayList<String>的方法。也可以初始化它。

  • 讀取傳入列表中的每個單詞。將其添加到本地列表k次(提示:嵌套循環)。如果沒有要閱讀的單詞,則添加元素的循環不會被觸發。

+0

我只是*重讀那個。接得好。 – Makoto

+0

以及據我所知,我只需要寫出該方法,並在沒有任何回報的情況下解決問題。因爲這是一個在線任務,所以它會告訴我,當我運行它時,我的方法是對還是錯。但是,謝謝,我會嘗試你的提示。再次感謝。 – user3256022

+0

這是非常糟糕的形式,只是將數據傳遞到類似的方法,因爲別的東西可能正在使用它。它*可以在原地完成,但我不會推薦它(或者如果你不小心的話,你會非常習慣'ConcurrentModificationException'這個短語)。 – Makoto

0

下面是代碼

public static List<String> stutter(ArrayList<String> list,int k) { 
     List<String> resultList=new ArrayList<String>(); // creating new list 
     if(k<=0) { 
      return resultList; //return empty list. Return null if necessary 
     } else { 
      for(String s : list) { //looping the list input 
       for(int i=0;i<k;i++) { 
        resultList.add(s); // adding the same string k times 
       } 
      } 
      return resultList; 
     } 
    } 
0
  1. 第二個for循環應該嵌套在第一個for循環
  2. 和字符串應該被添加到newlist,而不是將它們添加到 的samelist

完成對代碼的修改。

public static void stutter(List<String> list,int k) { 
      String s = ""; 
      List<String> newList=new ArrayList<String>(); 
      if(k>0) { 
       for(int i = 0; i<list.size(); i++) { 
        s = list.get(i); 

        for(int j = 0; j < k; j++) { 
         newList.add(s); 
        } 
       } 
      } 
      list=newList; // Assigning it your input list since you want to change the actual list 

      System.out.println(list.toString()); //Since not returning anything, printing the data 
     }