Как читать на входе от пользователя в char? - PullRequest
0 голосов
/ 04 мая 2020

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

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");
        }
    }

1 Ответ

0 голосов
/ 04 мая 2020

tldr : используйте c = br.readLine().charAt(0) вместо c = (char)br.read() в вашем for l oop, чтобы прочитать char.


Если вы попытаетесь запустить его с q = 1, а затем с char c = 'E' в качестве ввода, он будет работать как положено.

Но то же самое с q = 2, выполняется регистр по умолчанию и так далее для других значений q.

Потому что, когда вы набираете E или D и нажимаете 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.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...