【问题标题】:How to use System.in.read() in java?如何在 java 中使用 System.in.read()?
【发布时间】:2014-05-03 21:35:44
【问题描述】:

我需要在布尔二维数组中输入和加载一些字符。如果char为X,则将数组元素标记为true;否则,如果 char 是 .,则将数组元素标记为 false。

这是我的设计:

boolean[][] Array = new boolean[2][2];

for (int i = 0; i < 2; i++) {  
   for (int j = 0; j < 2; j++) {
        if (System.in.read() == '.') {
            Array[i][j] = false;
        } else if (System.in.read() == 'X') {
            Array[i][j] = true;
        }
    }
}

例如,如果我输入....XXXX,它不会产生正确的结果。同样对于其他输入,结果也不正确。

那么如何处理呢?

【问题讨论】:

  • 你是从阅读InputStream#read()的javadoc开始的吗?

标签: java arrays inputstream


【解决方案1】:

如果第一个字符不是'.',则您将在循环中第二次读取字符。

每个循环只能读取一个字符。将字符保存在if语句之前的变量中,然后将变量依次与'.''X'进行比较。

【讨论】:

    【解决方案2】:

    您不应在每个if 语句中调用read() 函数。调用一次并将其存储在一个变量中,这样您就不会继续阅读输入。那可能是一件事弄乱了你的功能。另一个是您如何将chars 与== 运算符进行比较。应该使用char.equals 方法进行字符比较。放置几个断点并查看正在发送哪些值以进行调试。也许可以尝试以下方法:

    boolean[][] Array= new boolean[2][2];
    
    for (int i = 0; i < 2; i++) {  
      for (int j = 0; j < 2; j++) {
            Character input = (char)System.in.read();
            if (input.equals('.')) {
                Array[i][j] = false;
            } else if (input.equals('X')) {
                Array[i][j] = true;
            }
        }
    }
    

    【讨论】:

    • 啊哈,但是当我像你说的那样做时,我得到了“char cannot be dereferenced”错误。我该如何解决呢?
    • 尝试使用字符而不是字符。 char 是原始的。 Character 是具有方法的包装类。我更改了上面的代码。
    猜你喜欢
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    相关资源
    最近更新 更多