2012-11-16 10 views
6

Mam tu trochę irytującego przypadku; w którym nie jestem w stanie odpowiednio wczytać danych wejściowych. Zawsze brałem dane wejściowe przez Scanner i nie jestem przyzwyczajony do BufferedReader.Wprowadzanie danych wejściowych za pomocą BufferedReader w Javie


format wejściowy


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. 

Przykład

Input: 
2 
AbcDef 
1 2 
abcabc 
1 1 

Mój kod do tej pory:


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

Podczas wprowadzania do wyżej przedstawionym przykładzie, pojawia się następujący komunikat:

AbcDef 
9 
49 
2 
9 
97 
+1

twój m [0] = inp.read(); czyta bajt lub coś takiego. wykonaj readline w ciągu znaków i podziel go, aby uzyskać dwa pola, a następnie przeanalizuj je w ints. –

+0

'inp.read()' odczyta pojedynczy znak (16-bitowy), nie bajt (8-bitowy). –

Odpowiedz

13

BufferedReader#read czyta pojedynczy znak [0 do 65535 (0x00-0xffff)] ze strumienia, więc nie jest możliwe odczytanie pojedynczej liczby całkowitej ze strumienia.

  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]); 

Można sprawdzić również Scanner vs. BufferedReader.

2

Identyfikator problemu z powodu inp.read();method. Zwraca pojedynczy znak na raz i dlatego, że przechowujesz go w int typu tablicy, a więc po prostu przechowujesz jego wartość ascii.

Co można zrobić po prostu

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]); 
} 
0

Nie można odczytać poszczególne liczby całkowite w jednej linii oddzielnie przy użyciu BufferedReader jak to zrobić za pomocą Scanner klasę. Chociaż, można zrobić coś takiego w odniesieniu do zapytania:

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 
     } 
    } 
} 

Mam nadzieję, że to pomoże.

Powiązane problemy