Как посчитать строки, числа и двойники в скрипте из пользовательского ввода (сканер) в java? - PullRequest
0 голосов
/ 30 апреля 2020

Я новичок, и я попробовал несколько разных способов из того, что я узнал из вопросов других людей, но я думаю, что моя проблема со следующей проблемой заключается в том, что я не могу понять логи c моего кода. Если кто-то может предложить решение с объяснением логики c кодов, я был бы очень признателен. Я должен создать метод в формате method (), который будет предлагать пользователю ввести скрипт, который включает в себя String, числа и удваивается. Метод должен подсчитать количество строк, чисел и значений типа double и распечатать список строк, чисел и значений типа double. У меня есть часть, что метод печатает список строк, чисел и удваивается, но, кажется, я не могу получить счетчик для их подсчета. Я получил это до сих пор:

 import java.util.Scanner;
 public class Games {

    private Scanner input;

 public Games() {

  input = new Scanner(System.in);

 }

 public void textParser() {

  System.out.println("Enter a Script");
  int intCount = 0;
  int dblCount = 0;
  int strCount = 0;

  while(input.hasNext()) {
   if(input.hasNextInt()) {
    int num = input.nextInt();
    System.out.println(num);
    intCount++;
 }else if(input.hasNextDouble()) {
   double value = input.nextDouble();
   System.out.println(value);
   dblCount++;
 }else {
   String oneWord = input.next();
   System.out.println(oneWord);
   strCount++;
 }
}

System.out.println("Number of integers: " + intCount);
System.out.println("Number of doubles: " + dblCount);
System.out.println("Number of strings: " + strCount);


}

  public static void main(String[] args) {
  Games demo = new Games();
  demo.textParser();
 }

}

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

 Enter a Script
 32 quick brown foxes jump over 65 lazy dogs and few doubles are 43.3 
 and 76.9

 32
 65
 Number of integers: 2
 43.3
 76.9
 Number of doubles: 2
 quick
 brown 
 foxes 
 jump 
 over
 lazy 
 dogs 
 and 
 few 
 doubles 
 are
 and
 Number of strings: 12

Фактический вывод:

 32
 65
 43.3
 76.9
 quick
 brown 
 foxes 
 jump 
 over
 lazy 
 dogs 
 and 
 few 
 doubles 
 are
 and

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

В начале вы говорите while(scanner.hasNext(). Это означает, что весь код в l oop будет выполняться в значительной степени до тех пор, пока выполняется программа.

Вы поместили операторы, которые печатают счетчики, вне l oop, и разработали ваш код таким образом, что вы никогда не покинете этот l oop.

Так что вам нужно какое-то условие выхода. Скажем, если одна из строк exit, вы выходите из l oop и печатаете счетчики:

while (input.hasNext()) {
    if (input.hasNextInt()) {
        // ...
    } else if (input.hasNextDouble()) {
        // ...
    } else {
        String oneWord = input.next();
        System.out.println(oneWord);
        strCount++;

        if (oneWord.equals("exit")) {
            input.close();
            break;
        }
    }
}

или, если вы не хотите вводить «выход» в там, сделайте это:

int intCount = 0, doubleCount = 0, stringCount = 0;

while (input.hasNextLine()) {
    String[] segments = input.nextLine().split(" ");

    for (String segment : segments) {
        System.out.println(segment);

        try {
            int asInt = Integer.parseInt(segment);
            intCount++;
        } catch (NumberFormatException e) {
            try {
                double asDouble = Double.parseDouble(segment);
                doubleCount++;
            } catch (NumberFormatException e2) {
                stringCount++;
            }
        }
    }

    System.out.println("Number of integers: " + intCount);
    System.out.println("Number of doubles: " + doubleCount);
    System.out.println("Number of strings: " + stringCount);
}
0 голосов
/ 30 апреля 2020

Сканер продолжит чтение, пока не найдет условие «конец файла».

Когда вы читаете из стандартного ввода, это будет либо при отправке символа EOF (обычно ^ d на Unix) или в конце файла, если вы используете <перенаправление стиля. </p>

Вам нужно какое-то условие выхода

if (oneWord.equals("exit")) {
            input.close();
            break;
 }

Другой подход после ввода ввода Ctrl + Z отправит EOF.

...