我怎么告诉编译器没有更多的输入

时间:2016-05-07 00:06:15

标签: java cygwin

我的朋友正在向我展示基本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");
    }
}

3 个答案:

答案 0 :(得分:3)

你有一个while (true),所以,是的,程序总是循环询问键盘上的数字。

我猜你在循环中需要另一个else if来抓住一个特殊的&#39;字符意味着循环必须结束,从那里,你可以调用break

E.g。

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

答案 1 :(得分:1)

InputStream read()方法返回一个字节为0到255之间的int。

int input = System.in.read();

再次查看条件语句:

if (input < 0) break;

输入值始终大于0 小于255 。 如果 输入小于0 ,则您的条件仅评估为true,除非到达流的末尾,否则不会发生此情况。

您可以编辑此行并使用:

if (input == 80) break;

然后,如果您键入&#34; P&#34;,它将跳出循环并根据需要显示结果。

或者,您可以使用 java.util.Scanner

中的扫描程序
Scanner reader = new Scanner(System.in);

您可以使用 read()函数读取下一个输入字符串。 java String类有一个名为 charAt(int index)的方法,它返回字符串中特定索引处的char。您可以使用此方法获取输入的第一个字符:

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

如果你把它放在一起:

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

这样您就不必担心将 ints 投射到字符。希望这会有所帮助。

答案 2 :(得分:0)

对于Java中的新手,最好从Scanner开始。

尝试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