web-dev-qa-db-fra.com

Prendre des entrées avec BufferedReader en Java

J'ai un cas un peu ennuyeux ici; dans lequel je ne suis pas capable de prendre correctement l'entrée. J'ai toujours pris des entrées via Scanner, et je ne suis pas habitué à la BufferedReader


FORMAT D'ENTRÉE


First line contains T, which is an integer representing the number of test cases.
T cases follow. Each case consists of two lines.

First line has the string S. 
The second line contains two integers M, P separated by a space.

EXEMPLE

Input:
2
AbcDef
1 2
abcabc
1 1

Mon code jusqu'à présent:


public static void main (String[] args) throws Java.lang.Exception
{
    BufferedReader inp = new BufferedReader (new InputStreamReader(System.in));
    int T= Integer.parseInt(inp.readLine());

    for(int i=0;i<T;i++) {
        String s= inp.readLine();
        int[] m= new int[2];
        m[0]=inp.read();
        m[1]=inp.read();

        // Checking whether I am taking the inputs correctly
        System.out.println(s);
        System.out.println(m[0]);
        System.out.println(m[1]);
    }
}

En entrant dans l'exemple ci-dessus, j'obtiens le résultat suivant:

AbcDef
9
49
2
9
97
7
OneMoreError

BufferedReader#read lit le caractère unique [0 à 65535 (0x00-0xffff)] du flux, il est donc impossible de lire un entier entier à partir du flux.

            String s= inp.readLine();
            int[] m= new int[2];
            String[] s1 = inp.readLine().split(" ");
            m[0]=Integer.parseInt(s1[0]);
            m[1]=Integer.parseInt(s1[1]);

            // Checking whether I am taking the inputs correctly
            System.out.println(s);
            System.out.println(m[0]);
            System.out.println(m[1]);

Vous pouvez également vérifier Scanner vs. BufferedReader .

14

L'identifiant du problème à cause de inp.read();méthode . Il ne renvoie qu'un caractère à la fois et parce que vous le stockez dans un type de tableau de type int, il ne stocke donc que la valeur ascii de ce dernier.

Que pouvez-vous faire simplement 

for(int i=0;i<T;i++) {
    String s= inp.readLine();
    String[] intValues = inp.readLine().split(" ");
    int[] m= new int[2];
    m[0]=Integer.parseInt(intValues[0]);
    m[1]=Integer.parseInt(intValues[1]);

    // Checking whether I am taking the inputs correctly
    System.out.println(s);
    System.out.println(m[0]);
    System.out.println(m[1]);
}
2
Sumit Singh

Vous ne pouvez pas lire des nombres entiers individuels sur une seule ligne séparément à l'aide de BufferedReader comme vous le faites avec Scannerclass . Bien que vous puissiez faire quelque chose comme ceci en ce qui concerne votre requête:

import Java.io.*;
class Test
{
   public static void main(String args[])throws IOException
    {
       BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
       int t=Integer.parseInt(br.readLine());
       for(int i=0;i<t;i++)
       {
         String str=br.readLine();
         String num[]=br.readLine().split(" ");
         int num1=Integer.parseInt(num[0]);
         int num2=Integer.parseInt(num[1]);
         //rest of your code
       }
    }
}

J'espère que cela t'aidera.

0
Anubhav Singh