#java
#java
Вопрос:
Я новичок в Java (менее месяца самостоятельного изучения), и как начинающий разработчик я хотел бы думать, что в этой теме я должен хорошо разбираться (извините меня за отсутствие терминологии здесь)
Вот мой код:
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
ArrayList<String> wordsList = new ArrayList<String>();
while (true) {
System.out.println("Type a word: ");
String word = reader.nextLine();
if (word.isEmpty()) {
Collections.reverse(wordsList);
System.out.println("You typed the following words: ");
for (String wordss : wordsList) {
System.out.println(wordss);
}
break;
}
wordsList.add(word);
}
}
Я прошу прощения за плохой отступ.
В этой строке:
for (String wordss: wordsList)
print(wordss)
Я полагаю, что я создаю совершенно новый массив строк с именем wordss, и он содержит всю идентичную информацию wordsList после его обновления. Было бы эффективнее написать цикл, который выводит каждое из слов в массиве wordsList, а не выделяет больше места для другого массива?(пожалуйста, исправьте мое невежество, где это необходимо) Лучше ли быть более простым с моим кодом?
Мой другой вопрос заключается в том, что у меня есть цикл, выполняющий проверку if после каждого ввода нового слова. Я также считаю, что это неэффективно — так что было бы лучше просто переместить проверку на после добавления слов?
Большое спасибо!
Комментарии:
1. Вы спрашиваете о разнице между обычным циклом for и циклом for-each?
2. Вы не » создаете совершенно новый массив строк «; не в последнюю очередь потому, что у вас есть
ArrayList
, а не aString[]
. Вы зацикливаетесь наList
том, что у вас уже есть.3. Я думаю, но это не обязательно должен быть цикл for . Он будет каждый раз обновлять переменную счетчика и печатать каждый индекс массива (надеюсь, это имеет смысл, поскольку я плохо объясняю lol)
4. Что касается неэффективности,
Collections.reverse(wordsList)
каждый раз вызывать расточительно — я бы предложил использовать aLinkedList
, который реализуетDeque
интерфейс, а затем вызываетDeque.addFirst
метод.5. @Kirinya » Java, поскольку это не тот язык, который следует использовать, когда эффективность действительно важна » — доказательства, пожалуйста.
Ответ №1:
Все, что вы написали, правильно. Для принятия слов и завершения необходимо внести лишь небольшую модификацию. Приведенный ниже измененный код работает для завершения, если нажать «Enter» еще раз.
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
List<String> wordsList = new ArrayList<String>();
System.out.println("Type a word: ");
while (reader.hasNextLine()) {
System.out.println("Type a word: ");
String word = reader.nextLine();
wordsList.add(word);
if (word.isEmpty()) {
System.out.println("You typed the following words: ");
for (String typedWord : wordsList) {
System.out.println(typedWord);
}
break;
}
}
}
Комментарии:
1. Я не думаю, что вы ответили на вопрос, который был у OP