2016-05-07 2 views
0

Мой друг показывает мне, как работает базовая java, однако он не показал мне, как работает код полностью, и я хотел знать. Как сообщить любому компилятору, что больше нет вход? потому что это просто позволяет мне продолжать печатать навсегда. Я уверен, что код правильный, только когда я скомпилирую код, он просто покидает пространство, и я могу продолжать нажимать enter, чтобы ввести больше символов, но я не знаю, как его остановить.Как сообщить компилятору, что больше нет ввода

import java.io.*; 

class FileStats { 

    /** 
    * Implements the entire process (reading and reporting). 
    * 
    * @param args is not used. 
    */ 
    public static void main(String args[]) throws IOException { 
     // Variables to hold the various character class counts. 
     int lowerCase = 0; 
     int upperCase = 0; 
     int whiteSpace = 0; 
     int otherChars = 0; 
     int totalChars = 0; 

     // Read the (standard) input 
     while (true) { 
      // Quit if there's no more input. 
      int input = System.in.read(); 
      if (input < 0) break; 

      // Cast the input to a character. 
      char c = (char) input; 

      // Tally up the statistics. 

      totalChars++; 

      if ('a' <= c && c <= 'z') { 
       lowerCase++; 
      } else if ('A' <= c && c <= 'Z') { 
       upperCase++; 
      } else if (' ' == c || '\t' == c || '\n' == c) { 
       whiteSpace++; 
      } else { 
       otherChars++; 
      } 
     } 

     // Report the statistics 
     System.out.println(totalChars + " Total Characters"); 
     System.out.println(lowerCase + " Lower-Case Characters"); 
     System.out.println(upperCase + " Upper-Case Characters"); 
     System.out.println(whiteSpace + " White-Space Characters"); 
     System.out.println(otherChars + " Other Characters"); 
    } 
} 
+0

Существует два отдельных этапа: 1) Редактирование кода с помощью редактора 2) Компиляция кода с помощью компилятора. Очень неясно, о чем вы спрашиваете. –

+0

извините, я знаю, что вопрос очень запутан, однако его просто так, что когда я компилирую код в компиляторе, например cygwin, ничего не происходит, например, я наберу «Javac FileStats.java», скомпилирую его, затем используйте java FileStats, чтобы вызвать класс, затем i введите несколько номеров, и теперь я пытаюсь сделать код законченным и распечатать статистику, но я не знаю, как это сделать. –

+0

хорошо, учитывая, что у вас есть оператор while (true) ', который он никогда не остановит ... вам нужно избавиться от этого и подумать о лучшем состоянии цикла, возможно, как ... 'while (readInNumber! = -1) продолжать ...' – 3kings

ответ

3

Вы hava a while (true), так что да, программа всегда будет цитировать запросы чисел с клавиатуры.

Я думаю, вам понадобится еще else if в петле, захватывающей «специальный» символ, означающий, что цикл должен заканчиваться, а оттуда вы можете просто позвонить break.

E.g.

... 
else if (c == '0') { 
    break; 
} 
... 
+0

ok Я думаю, я понимаю, спасибо –

+0

@HaroldSullivan Я только что обновил свой ответ, чтобы показать вам небольшую логическую ошибку, которую вы сделали в инструкции if. В противном случае ваш код не изменится. – Aph

0

Для новичков в java лучше всего начать с сканера.

Попробуйте java.util.Scanner:

import java.io.*; 
import java.util.Scanner; 

class FileStats { 

    /** 
    * Implements the entire process (reading and reporting). 
    * 
    * @param args is not used. 
    */ 
    public static void main(String args[]) throws IOException { 
     // Variables to hold the various character class counts. 
     int lowerCase = 0; 
     int upperCase = 0; 
     int whiteSpace = 0; 
     int otherChars = 0; 
     int totalChars = 0; 

     // Read the (standard) input 
     Scanner scanner = new Scanner(System.in); 

     String line = scanner.nextLine(); 

     for (int i = 0; i < line.length(); i++) { 

      // Tally up the statistics. 
      totalChars++; 

      char c = line.charAt(i); 
      if ('a' <= c && c <= 'z') { 
       lowerCase++; 
      } else if ('A' <= c && c <= 'Z') { 
       upperCase++; 
      } else if (' ' == c || '\t' == c || '\n' == c) { 
       whiteSpace++; 
      } else { 
       otherChars++; 
      } 
     } 

     // Report the statistics 
     System.out.println(totalChars + " Total Characters"); 
     System.out.println(lowerCase + " Lower-Case Characters"); 
     System.out.println(upperCase + " Upper-Case Characters"); 
     System.out.println(whiteSpace + " White-Space Characters"); 
     System.out.println(otherChars + " Other Characters"); 
    } 
} 

Попробуйте код there.

1

InputStream чтения() метод возвращает байт как междунар в диапазоне от 0 до 255.

int input = System.in.read(); 

Посмотрите на свой условный оператор снова:

if (input < 0) break; 

Значение на входе всегда будет более 0 и менее 255. Ваше условие соответствует только true, если значение меньше 0, которое не произойдет, если конец потока не достигнут.

Вы можете редактировать эту строку и использовать:

if (input == 80) break; 

Затем, если вы ввели «P», это будет вырваться из петли и отображения результатов, как вам нужно.

В качестве альтернативы, вы можете использовать сканер из java.util.Scanner

Scanner reader = new Scanner(System.in); 

Вы можете использовать функцию чтения() прочитать следующую строку ввода. Класс java String имеет метод charAt (int index), который возвращает символ по определенному индексу в строке.Вы можете использовать этот метод, чтобы получить первый символ ввода:

char c = reader.next().charAt(0); 

Если вы поместите это вместе:

while (true) { 
    char c = reader.next().charAt(0); 
if (c == '.') break; 

Таким образом, вам не придется беспокоиться о литье Интс к чарсы. Надеюсь это поможет.

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