2016-08-13 4 views
2
import java.io.*; 

public class Page117 
{ 

    public static void main(String[] args) throws IOException 
    { 
     BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 
     char letter; 
     String sentence; 
     int counter = 0; 
     char response = 'o'; 

     do 
     { 
      System.out.print("Type a sentence: "); 
      sentence = input.readLine(); 
      System.out.print("Type a character to find: "); 
      letter = (char) input.read(); 

      for(int x=0;x<sentence.length();x++) 
      { 
       if(letter==sentence.charAt(x)) 
       { 
        counter++; 
       } 
      } 

      System.out.println("Number of times " + letter + " occured is: " + counter); 
      System.out.print("Continue? [y/n]: "); 
      response = (char) input.read(); 

     }while(response != 'n');   
    }   
} 

О программе: Пользователь вводит предложение. Пользователь также вводит символ и подсчитывает, сколько из этого символа встречается в предложении.Java: Do-while цикл «да или нет»

У меня возникла небольшая проблема. Как сделать так, чтобы после процесса он позволял мне вводить мой ответ. Потому что после того, как я введу символ и расскажу о количестве вхождений, он либо выйдет, либо не позволит мне вводить что-либо.

Я пробовал почти все в своем коде. Я не использую do-while циклы, поэтому это довольно сложно для меня. Я тоже не использую booleans.

+1

Подсказка: при ответе «Введите символ для поиска:» Вы, вероятно, ввести какое-то письмо и нажмите [Enter], это возвращение фактически конец-линии голец, см https: // ideone. com/ePYWSE Примечание: вам следует использовать «Сканер» –

+0

. Лучшим предложением для чтения является чтение на интерактивном входе. Возможно, вы захотите использовать сканер. Мое подозрение заключается в том, что если вы наберете, скажем, t, букву t программы в своем предложении и возвращаете карету, тогда возврат каретки будет считаться ответом в конце и сравним с «n» , Вы можете проверить такие допущения с помощью отладчика или временных инструкций System.out.println(). –

+0

Количество ошибок также неверно, так как вы не очищаете переменную * counter * для каждого прогона. – 0x23212f

ответ

2

Проблема, с которой вы сталкиваетесь, связана с тем, что вы читаете один символ, в то время как у вас есть несколько символов, которые предоставляются: символ ввода + возврат каретки.

Так просто заменить этот

letter = (char) input.read(); 

С чем-то вроде этого:

letter = input.readLine().charAt(0); 

Действительно вызова readLine() заставит читателя прочитать всю строку (возврат каретки включен) и будет возвращать только то, что вам до конца строки, соответствующего вашему входному символу.

1

Вместо этого вы можете использовать сканер, следующий код ожидает ввода, как предполагалось. Также вы, вероятно, захотите сбросить счетчик на новое предложение:

Scanner input = new Scanner(System.in); 

char letter; 
String sentence; 
int counter = 0; 
char response = 'o'; 

do 
{ 
    counter = 0; // reset the counter for a new sentence 

    System.out.print("Type a sentence: "); 
    sentence = input.nextLine(); 
    System.out.print("Type a character to find: "); 
    letter = (char) input.nextLine().charAt(0); 

    for(int x=0;x<sentence.length();x++) 
    { 
     if(letter==sentence.charAt(x)) 
     { 
      counter++; 
     } 
    } 
    System.out.println("Number of times " + letter + " occured is: " + counter); 
    System.out.print("Continue? [y/n]: "); 
    response = (char) input.nextLine().charAt(0); 

}while(response != 'n'); 

input.close(); 
2

@Ole V.V является правильным. Возврат каретки, который вводит пользователь после того, как он вводит первый раз, считывается в конце цикла. Ниже приведен код. Также в цикле должен быть инициализирован счетчик.

public class Page117 { 

    public static void main(String[] args) throws IOException 
    { 
     BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 
     char letter; 
     String sentence; 

     do 
     { 
      int counter = 0; 
      char response = 'o'; 
      System.out.print("Type a sentence: "); 
      sentence = input.readLine(); 
      System.out.print("Type a character to find: "); 
      letter = input.readLine().charAt(0); 

      for(int x=0;x<sentence.length();x++) 
      { 
       if(letter==sentence.charAt(x)) 
       { 
        counter++; 
       } 
      } 

      System.out.println("Number of times " + letter + " occured is: " + counter); 
      System.out.print("Continue? [y/n]: "); 

     }while(input.readLine().charAt(0) != 'n'); 

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