Хранение пользовательского ввода в строковом массиве - PullRequest
0 голосов
/ 26 августа 2018

Я новичок в Java.Я пытаюсь написать программу для чтения серии слов из аргументов командной строки и нахождения индекса первого совпадения данного слова.Пользователь может ввести «Я люблю яблоко», а данное слово «яблоко».Программа отобразит «Индекс первого совпадения« apple »равен 2».

То, что я до сих пор делал, не работает.Это мой способ хранения ввода в массив строк не правильно?

import java.util.Scanner;

public class test {
    public static void main(String [] args) {

        System.out.println("Enter sentence: ");

        Scanner sc = new Scanner(System.in);

        String input = sc.nextLine();

        int num=1;
        String sentence[]=new String[num];

        for(int i=0; i< num; i++) {

          sentence[i] = input; // store the user input into the array.
          num = num+1;
        }


        System.out.println("Enter the given words to find the index of its first match: ");
        Scanner sc2 = new Scanner(System.in);
        String key = sc2.next(); 

        for(int j=0; j<num; j++) {
            while (sentence[j].equals(key)) {
                System.out.println("The index of the first match of "+key+" is "+j);
            }
        }
    }   
}

Ответы [ 6 ]

0 голосов
/ 26 августа 2018

Я сделал следующие изменения, чтобы ваш код работал. Обратите внимание, что вы неправильно сохранили входную строку. В вашем коде весь код хранился как первый индекс в массиве. Вам не нужен первый for-loop, так как мы можем использовать функцию .split(), чтобы различать каждое слово в отдельном индексе в массиве. Остальной код остается без изменений.

public class ConfigTest {

   public static void main(String[] args) {

      System.out.println("Enter sentence: ");
      Scanner sc = new Scanner(System.in);

      String input = sc.nextLine();
      // Use this to split the input into different indexes of the array
      String[] sentence = input.split(" ");

      System.out.println("Enter the given words to find the index of its first match: ");
      Scanner sc2 = new Scanner(System.in);
      String key = sc2.next();

      for (int i = 0; i < sentence.length; i++) {
         if (sentence[i].equals(key)) {
            System.out.println("The index of the first match of " + key + " is " + i);
         }
      }

   }
}
0 голосов
/ 26 августа 2018

Массив строк не требуется в вашем решении.

Попробуйте это: -

    System.out.println("enter sentence ");
    Scanner sc = new Scanner(System.in);

    String input = sc.nextLine();

    System.out.println("enter the given word to fin the index ");

    sc = new Scanner(System.in);

    String toBeMatched = sc.nextLine();

    if (input.contains(toBeMatched)) {
        System.out.println("index is  " + input.indexOf(toBeMatched));
    } else {
        System.out.println("doesn't contain string");
    }
0 голосов
/ 26 августа 2018

Я думаю, у вас проблема с объемом. предложение [] объявляется и создается в вашем первом цикле. Попробуйте переместить объявление за пределы цикла, и вы должны устранить ошибку.

Я также заметил пару ошибок. Вы можете попробовать это

public static void main(String[] args) {
    // TODO code application logic here
    System.out.println("Enter Sentence");
    Scanner sc = new Scanner(System.in);

    String input = sc.nextLine();
    String sentence[] = input.split("\\s");


    System.out.println("Enter Word");
    Scanner sc2 = new Scanner(System.in);
    String key = sc2.next();

    int index = 0;
    for(String word : sentence)
    {

        if(word.equals(key))
        {
            System.out.println("The index of the first match of " + key + " is " + index);
            break;
        }
        index++;
    }

}

черепаха

0 голосов
/ 26 августа 2018

Вам просто нужно объявить массив предложений вне цикла for, поскольку на данный момент проблема выходит за рамки. Подробнее о области действия переменной в java .Кроме того, это не то, что вы намереваетесь делать, вы намеревались принимать ввод в качестве командной строки.

Итак, ввод, который вы получите, будет поступать в аргументах String [].Подробнее об аргументах командной строки смотрите здесь .

0 голосов
/ 26 августа 2018
  • Объявите String [] sentence вне цикла for.Он не виден вне первого блока for.
  • Массив предложений создается снова и снова во время итерации цикла for.Цикл не требуется, чтобы получить строку из командной строки.

  • Отредактировав мой ответ и исключив использование циклов any for, Arrays.asList() примет массив words и извлечет индекс слова из полученного List.

    public static void main(String[] args) throws IOException  {
        System.out.println("Enter sentence: ");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        System.out.println("Enter the given word to find the index of its first match: ");
        Scanner wordInput = new Scanner(System.in);
        String key = wordInput.next();
        String[] words = input.split(" ");
        int occurence = Arrays.asList(words).indexOf(key);
        if(occurence != -1){
            System.out.println(String.format("Index of first occurence of the word is %d", occurence));
        }
    }
    
0 голосов
/ 26 августа 2018
  • переменная предложения определяется только внутри цикла for, ее необходимо объявить вне ее
  • Вы можете снова использовать первую объявленную переменную Scanner (sc) вместо объявления другой (sc2)
  • предложение [i] = ввод - будет означать - предложение [0] = "Я люблю яблоко"
  • Переменная сканера может сделать всю работу за вас для ввода в массив вместоцикл for

String[] a = sc. nextLine(). split(" ");

Это отсканирует ввод новой строки и разделит каждую строку, разделенную пробелом, в каждый массив.

System.out.println("Enter sentence: ");

Scanner sc = new Scanner(System.in);

String[] sentence = sc. nextLine(). split(" ");

System.out.println("Enter the given words to find the index of its first match: ");
String key = sc.nextLine(); 

for(int j=0; j<num; j++) {
    if (sentence[j].matches(key)) {
        System.out.println("The index of the first match of "+ key +" is "+ j);
    }
}
...