2016-11-25 4 views
2

Я пишу программу для домашней работы, где я должен изменить строку, используя меню. Остальная часть кода работает отлично, за исключением одной части, которая имеет меня в привязке. Я использую метод, чтобы найти слово и все его вхождения в String. Всякий раз, когда я выполняю этот метод вне цикла, я получаю результат, который мне нужен, но всякий раз, когда я использую его в течение некоторого времени или оператора switch, программа ничего мне не возвращает. Метод должен возвращать int для количества вхождений. Это выдержка из этого кода:Мой программный метод не будет ничего делать

import java.util.Scanner; 

    public class test { 
    public static Scanner scnr = new Scanner(System.in); 

    public static int findWord(String text, String userText) { 
     int occurance = 0; 
     int index = 0; 

     while (index != -1) { 
      index = userText.indexOf(text, index); 
      if (index != -1) { 
       occurance++; 
       index = index + text.length(); 
      } 
     } 

     return occurance; 
    } 

    public static void main(String[] args) { 

     System.out.println("Enter a text: "); 
     String userText = scnr.nextLine(); 

     System.out.println("Enter a menu option"); 
     char menuOption = scnr.next().charAt(0); 

     switch (menuOption) { 
     case 'f': 
      System.out.println("Enter a phrase from text: "); 
      String text = scnr.nextLine(); 

      int occurance = (findWord(text, userText)); 

      System.out.println("" + text + " occurances : " + occurance + ""); 
      break; 
     default: 
      System.out.println("Goodbye"); 
     } 

     return; 
    } 
} 

Теперь пара вещей, которые я заметил. Если я приглашу пользователя во внутри метода, я верну свое целое число, но не текст, который я искал, чтобы завершить мой println внутри оператора switch. И всякий раз, когда я вызываю пользователя для слова внутри оператора switch, я ничего не получаю. Если у кого-то есть какие-либо решения для меня, я был бы очень признателен, потому что я не знаю, что я могу игнорировать или пропустить.

+0

Узнайте, как отлаживать код. Итак, вы можете видеть, что происходит. По какой-то причине текст читается как пустая строка, поэтому ваш цикл никогда не заканчивается (строка «» находится в индексе 0 в каждом цикле!). – Heri

+0

Причина может заключаться в том, что вы используете 'nextLine()' после 'next()' в цикле, и поскольку последний не использует последнюю строку новой строки, эта проблема должна возникать. Вы проверили эту тему? Http: //stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-nextint-or-other-nextfoo –

ответ

0

Необходимо изменить char menuOption = scnr.next().charAt(0); на char menuOption = scnr.nextLine().charAt(0);.

+0

ughhhh, thank youuuuuu – James

+0

oops, my bad, понял! – James

0

Проблемы с вашим Scanner методом, который вы читаете непрерывно с scnr.next(), но должна быть изменена на scnr.nextLine() `, как показано ниже:

public static void main(String[] args) { 
     Scanner scnr = null; 
     try { 
      scnr = new Scanner(System.in); 

     System.out.println("Enter a text: "); 
     String userText = scnr.nextLine(); 

     System.out.println("Enter a menu option"); 
     char menuOption = scnr.nextLine().charAt(0); 

     switch (menuOption) { 
     case 'f': 
      System.out.println("Enter a phrase from text: "); 
      String text = scnr.nextLine(); 

      int occurance = (findWord(text, userText)); 

      System.out.println("" + text + " occurances : " + occurance + ""); 
      break; 
     default: 
      System.out.println("Goodbye"); 
     } 
     return; 
     } finally { 
      if(scnr != null) 
       scnr.close(); 
     } 
    } 

Кроме того, убедитесь, что вы закрываете объект сканера правильно в блоке finally.

Смежные вопросы