2014-01-31 3 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. Второй цикл должен быть вложен в первый цикл
  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 
     } 
Смежные вопросы