2016-01-24 3 views
0

Я новичок в программировании на Java, и я пытаюсь создать программу, в которой пользователю будет предложено вводить слова в массив в зависимости от числа, указанного пользователем , После этого программа будет отображать введенные слова в алфавитном порядке. Пользователю также будет предложено «Какое слово заменить из списка?» Это та часть, в которой у меня проблемы. Я не знаю, как пользователь может ввести новое слово (строковый элемент) и заменить его из списка. То, что я смог придумать, - ввести целое число, представляющее позицию этого слова из массива, и заменить его из списка. Не знаю, как я могу сделать это как строку?Java: Как заменить строковый элемент из массива

import java.util.Scanner; 
import java.util.Arrays; 

public class EnterArrays { 

    public static void main (String args[]){ 

     int length; 
     Scanner sc = new Scanner(System.in); 
     Scanner an = new Scanner(System.in); 

     System.out.print("How many words are you going to enter? "); 
     length = sc.nextInt(); 

     String[] sEnterWord = new String[length]; 

     for(int nCtr = 0; nCtr < length; nCtr++){ 
      System.out.print("Enter word " + (nCtr+1) + ":"); 
      sEnterWord[nCtr] = sc.next(); 
     } 

     System.out.println("Your words are: "); 
     Arrays.sort(sEnterWord); 

     for(int nCtr = 0; nCtr < length; nCtr++){ 
      System.out.println(sEnterWord[nCtr]); 
     } 

     System.out.println("Which word would you like to change?"); 
     int sWordToChange = sc.nextInt(); 

     System.out.println("You have chosen to change the word : " + sWordToChange); 

     System.out.println("Enter the new word: "); 
     String sNewWord = an.nextLine(); 
     sEnterWord[sWordToChange-1] = sNewWord; 

     System.out.println("Your words are: "); 

     for(int nCtr = 0; nCtr < length; nCtr++){ 
      System.out.println(sEnterWord[nCtr]); 
     } 

    } 
} 
+0

вы должны проверить каждые слова в списке с указанной строкой пользователя. И в матче вы заменяете строку новым вводом и распечатываете новый список. - См. Метод String.equals (String). – Kami

+0

вы хотите изменить слово, но вы просите «nextInt()». – Steven

+0

, так что я снова использую цикл for для проверки соответствия, затем внутри цикла используется оператор if, реализующий метод String.equals (String)? – Andrew

ответ

0

Перерыв код на меньшие методы. См. Пример (рабочий) ниже. Все, что вам нужно сделать, чтобы изменить слово (строка, а не числовой индекс) с другим, - это цикл и проверить равенство с методом equals. Оператор break после этого остановит итерацию (после того, как вы найдете правильный индекс, больше нет смысла смотреть дальше).

import java.util.Scanner; 
import java.util.Arrays; 

public class Test { 

    public static void main (String args[]){ 
     String[] sEnterWord = getSortedWordArr(); 
     showWordlist(sEnterWord); 
     String sWordToChange = getInputFromKeyboard("Which word would you like to change? "); 
     System.out.println("You have chosen to change the word : " + sWordToChange); 
     changeWordInArray(sWordToChange, sEnterWord); 
     Arrays.sort(sEnterWord); 
     showWordlist(sEnterWord); 
    } 

    private static String[] getSortedWordArr(){ 
     String line = getInputFromKeyboard("How many words are you going to enter? "); 
     int length = Integer.valueOf(line); 

     String[] sEnterWord = new String[length]; 

     for(int nCtr = 0; nCtr < length; nCtr++){ 
      sEnterWord[nCtr] = getInputFromKeyboard("Enter word " + (nCtr+1) + ":"); 
     } 

     Arrays.sort(sEnterWord); 

     return sEnterWord; 
    } 

    private static String getInputFromKeyboard(String prompt){ 
     System.out.print(prompt); 
     Scanner s = new Scanner(System.in); 
     String input = s.nextLine(); 

     return input; 
    } 

    private static void showWordlist(String[] words){ 
     System.out.println("Your words are: "); 
     for (String w : words){ 
      System.out.println(w); 
     } 
    } 

    private static void changeWordInArray(String word, String[] array){ 
     String newWord = getInputFromKeyboard("Enter the new word: "); 

     for (int i = 0; i < array.length; i++){ 
      if (array[i].equals(word)){ 
       array[i] = newWord; 
       break; 
      } 
     } 

     Arrays.sort(array); 
    } 
} 

Пример вывода:

Сколько слов вы собираетесь ввести?5
Введите слово 1: яблочный
Введите слово 2: банан
Введите слово 3: оранжевый
Введите слово 4: груша
Введите слово 5: лимон
Ваши слова:
яблоко
банан
лимон
orange
груша
Какое имя вы хотели бы изменить? банан
Вы выбрали, чтобы изменить слово: банановый
Введите новое слово: клубничный
Ваших слова:
яблока
лимона
оранжевой
груши
клубники

+0

Большое спасибо за вашу помощь! Я смог исправить свою программу :) – Andrew

0

Заменить код между

System.out.println ("Какое слово вы хотели бы изменить?");

и

System.out.println ("Вы выбрали, чтобы изменить слово:" + sWordToChange);

с этим:

sc.nextLine(); 
String sWordToChange = sc.nextLine(); 
    int index=-1; 
    for (int i = 0; i < sEnterWord.length; i++) { 
     if(sEnterWord[i].equals(sWordToChange)) 
      index=i; 
    } 

Объяснение: Первая строка просто чтобы избежать сканера пропуска ассигнования на sWordToChange. Цикл for выполняет итерацию по массиву и ищет совпадение, если он находит один, он сохраняет индекс слова в ранее объявленном индексе переменной. Он инициализируется как -1, если слово не найдено. Возможно, вы захотите добавить блок if после замены, чтобы убедиться, что вы изменяете массив только тогда, когда есть соответствие

0

В этой программе вам нужно добавить sc.nextLine(), прежде чем принимать новое слово для обновления в массиве String. Метод nextLine() класса Scanner принимает пустую строку из буфера.

Вся программа с изменением кода.

package expertwebindia; 
import java.util.Arrays; 
import java.util.Scanner; 
public class Test { 
    public static void main(String args[]){ 
     int length; 
     Scanner sc = new Scanner(System.in); 
     //Scanner an = new Scanner(System.in); 

     System.out.print("How many words are you going to enter? "); 
     length = sc.nextInt(); 

     String[] sEnterWord = new String[length]; 

     for(int nCtr = 0; nCtr < length; nCtr++){ 
      System.out.print("Enter word " + (nCtr+1) + ":"); 
      sEnterWord[nCtr] = sc.next(); 
     } 

     System.out.println("Your words are: "); 
     Arrays.sort(sEnterWord); 

     for(int nCtr = 0; nCtr < length; nCtr++){ 
      System.out.println(sEnterWord[nCtr]); 
     } 

     System.out.println("Which word would you like to change?"); 
     int sWordToChange = sc.nextInt(); 
     sc.nextLine(); 
     System.out.println("You have chosen to change the word : " + sWordToChange); 

     System.out.println("Enter the new word: "); 
     String sNewWord = sc.nextLine(); 
     sEnterWord[sWordToChange-1] = sNewWord; 

     System.out.println("Your words are: "); 

     for(int nCtr = 0; nCtr < length; nCtr++){ 
      System.out.println(sEnterWord[nCtr]); 
     } 
    } 
} 
+0

hmm Не уверен, похоже, что он все еще просил целое число, когда я его пробовал :( – Andrew

+0

Его работа прекрасна для меня. При запросе целого числа. –

0

Изменен Scanner класс BufferedReader класса.

public class ArrayTest { 

public static void main(String args[]) throws IOException { 

    int length; 
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 

    System.out.print("How many words are you going to enter? "); 
    length=Integer.parseInt(br.readLine()); 

    String[] sEnterWord = new String[length]; 

    for (int nCtr = 0; nCtr < length; nCtr++) { 
     System.out.println("Enter word " + (nCtr + 1) + ":"); 
     sEnterWord[nCtr]=br.readLine(); 
    } 

    System.out.println("Your words are: "); 
    Arrays.sort(sEnterWord); 

    for (int nCtr = 0; nCtr < length; nCtr++) { 
     System.out.println(sEnterWord[nCtr]); 
    } 

    System.out.println("Which word would you like to change?"); 

    String sWordToChange = br.readLine(); 


    System.out.print("Enter the new word: "); 
    String sNewWord = br.readLine(); 

    for (int i = 0; i < sEnterWord.length; i++) { 
     if (sEnterWord[i].equals(sWordToChange)) { 
      sEnterWord[i] = sNewWord; 

     } 
    } 

    System.out.println("Your words are: "); 

    for (int nCtr = 0; nCtr < length; nCtr++) { 
     System.out.println(sEnterWord[nCtr]); 
    } 

}} 

вы также можете внести некоторые изменения в коде, как:

System.out.println("Which word would you like to change?"); 

    String sWordToChange = br.readLine(); 

    int position = Arrays.binarySearch(sEnterWord, sWordToChange); 
    if (position < 0) { 
     System.out.println("Word not found "); 

    } else { 
     System.out.print("Enter the new word: "); 
     String sNewWord = br.readLine(); 
     sEnterWord[position] = sNewWord; 
    } 
Смежные вопросы