2014-12-11 3 views
0

Я пытаюсь написать решение этого вопроса: http://sharecode.io/section/problemset/problem/1088, но я получаю ошибку времени выполнения и Eclipse kepler и компиляция ideone.com для меня разные. Я не понимаю, почему.Сканирование и получение ошибки времени выполнения

И на самом деле я хочу спросить, почему этот код System.out.println("String #"+(i+1)); запускается первым в цикле for и `str = br.readLine() ;? не работает правильно в порядке?

import java.io.IOException; 
public class Main { 
public static void main(String args[]) throws IOException { 
    java.io.InputStreamReader isr = new java.io.InputStreamReader(System.in); 
    java.io.BufferedReader br = new java.io.BufferedReader(isr, 16 * 1024); 

    int testcase = br.read(); 
    String str = ""; 
    String[] strarray=null; 

    for(int i=0;i<testcase;i++){ 
     str = br.readLine(); 
     strarray = str.split(""); 
     for (int j = 1; j < strarray.length; j++) { 
      if (strarray[j].equals("A")) 
       strarray[j] = "B"; 
      else if (strarray[j].equals("B")) 
       strarray[j] = "C"; 
      else if (strarray[j].equals("C")) 
       strarray[j] = "D"; 
      else if (strarray[j].equals("D")) 
       strarray[j] = "E"; 
      else if (strarray[j].equals("E")) 
       strarray[j] = "F"; 
      else if (strarray[j].equals("F")) 
       strarray[j] = "G"; 
      else if (strarray[j].equals("G")) 
       strarray[j] = "H"; 
      else if (strarray[j].equals("H")) 
       strarray[j] = "I"; 
      else if (strarray[j].equals("I")) 
       strarray[j] = "J"; 
      else if (strarray[j].equals("J")) 
       strarray[j] = "K"; 
      else if (strarray[j].equals("K")) 
       strarray[j] = "L"; 
      else if (strarray[j].equals("L")) 
       strarray[j] = "M"; 
      else if (strarray[j].equals("M")) 
       strarray[j] = "N"; 
      else if (strarray[j].equals("N")) 
       strarray[j] = "O"; 
      else if (strarray[j].equals("O")) 
       strarray[j] = "P"; 
      else if (strarray[j].equals("P")) 
       strarray[j] = "Q"; 
      else if (strarray[j].equals("Q")) 
       strarray[j] = "R"; 
      else if (strarray[j].equals("R")) 
       strarray[j] = "S"; 
      else if (strarray[j].equals("S")) 
       strarray[j] = "T"; 
      else if (strarray[j].equals("T")) 
       strarray[j] = "U"; 
      else if (strarray[j].equals("U")) 
       strarray[j] = "V"; 
      else if (strarray[j].equals("V")) 
       strarray[j] = "W"; 
      else if (strarray[j].equals("W")) 
       strarray[j] = "X"; 
      else if (strarray[j].equals("X")) 
       strarray[j] = "Y"; 
      else if (strarray[j].equals("Y")) 
       strarray[j] = "Z"; 
      else if (strarray[j].equals("Z")) 
       strarray[j] = "A"; 

     } 
     System.out.println("String #"+(i+1)); 
     for(int k =0 ; k<strarray.length;k++) 
     System.out.print(strarray[k]); 
    } 
} 
} 
+0

Попробуйте использовать переключатель случае, это будет быстрее здесь. – Maxzeroedge

+0

Или вы можете преобразовать прочитанный strarray [j] в Character и increnemt int (и проверить, 'Z' - установить 'A'). Это было бы намного быстрее. – Ivan

ответ

0

С

int testcase = br.read(); 

вы читали первый символ из входного сигнала. И если весь ваш вход только один символ, вся линия уже читать, так что

str = br.readLine(); 

не имеет ничего, чтобы и первый вывод, который вы видите: String #1
Вы можете изменить чтение число TestCase к :

int testcase = Integer.valueOf(br.readLine()); 

Но вы должны обращаться с NumberFormatException

+0

thanl вы очень много работали – user3688188

0

вы допустили ошибку здесь:

int testcase = br.read(); 

Эта строка содержит только один байт, но действительное число слов - это строка. , если входной сигнал равен «24» (за которым следует символ конца строки), br.read() вернет только представление байта «2», которое равно 50. Ваш цикл слишком длинный, и следующее br.readLine(); вернет «4 "(остальные символы на 1-й линии после того, как„2“)

Таким образом, вы должны заменить int testcase = br.read(); на

int testcase = Integer.parseInt(br.readLine()); 
+0

спасибо, что ответили мне, это сработало, как вы сказали @syllabus – user3688188

+0

отметьте ответ Йоаким как принято, он был первым – syllabus