【问题标题】:How to read in input from the user in char?如何在char中读取用户的输入?
【发布时间】:2020-05-04 18:34:21
【问题描述】:

当我输入字符时,输出显示为错误输入。我不明白出了什么问题。编译器中给出的输入是大写字母 E 或 D,但是当它符合 switch case 时,默认情况下运行。

public static void main(String[] args) throws IOException {
     //Scanner
    //Scanner s = new Scanner(System.in);
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int q = Integer.parseInt(br.readLine());
    char c;
    int i=0, j=0;
    int id=0, jd=0;
    int arr[][] = new int[q][q];
    int temp[][] = new int[q][q];
    for(int ip=0; ip<q; ip++)
    {
        c = (char)br.read();
        switch(c)
        {
            case 'E': 
                    for(int al=i; al<i+1; al++)
                    {
                        for(int al2=j; al2<j++; al2++)
                        {
                        arr[i][j] = Integer.parseInt(br.readLine());  
                        }
                    }

                    }
                    i++;
                    j++;
                    break;

            case 'D':
                     System.out.println(arr[id][jd]);
                     id++;
                     jd++;
                     break;
            default:
                    System.out.println("wrong input");
        }
    }

【问题讨论】:

  • 在默认分支中可以打印"wrong input, c = " + c看看实际值是多少?
  • 1.看来,case 'D' 位于 switch 语句 2 之外。如果您只需要获取大写字母,则可以使用 Character.toUpperCase() 方法 - 或者只需添加小写 case 标签。
  • 在 switch 语句中,大部分 case E 在 switch 之外。你需要检查你的括号。

标签: java char bufferedreader


【解决方案1】:

tldr:在for 循环中使用c = br.readLine().charAt(0) 而不是c = (char)br.read() 来读取char


如果您尝试使用q = 1 运行它,然后使用char c = 'E' 作为输入,它会按预期工作。

但与q = 2 相同,q 的其他值执行默认情况等等。

因为当您键入ED 并按enter 时,程序会读取\r\n,所以\r 用于第二次迭代,然后\n 用于第三次迭代。

因此建议使用br.readLine().charAt(0),以便您可以逐行阅读char

完整代码如下:

public static void main(String[] args) throws IOException {
     //Scanner
    //Scanner s = new Scanner(System.in);
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int q = Integer.parseInt(br.readLine());
    char c;
    int i=0, j=0;
    int id=0, jd=0;
    int arr[][] = new int[q][q];
    int temp[][] = new int[q][q];
    for(int ip=0; ip<q; ip++)
    {
        c = br.readLine().charAt(0);
        switch(c)
        {
            case 'E': 
                    for(int al=i; al<i+1; al++)
                    {
                        for(int al2=j; al2<j++; al2++)
                        {
                        arr[i][j] = Integer.parseInt(br.readLine());  
                        }
                    }
                    //an extra closing bracket was put here by OP at first
                    i++;
                    j++;
                    break;

            case 'D':
                     System.out.println(arr[id][jd]);
                     id++;
                     jd++;
                     break;
            default:
                    System.out.println(c);
                    System.out.println("wrong input");
        }
    } // one } was missing here too.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 2011-04-30
    相关资源
    最近更新 更多