2016-05-09 8 views
-1

Ich schrieb den Code in JAVA und es scheint in Eclipse gut zu funktionieren. Aber ich erhalte einen Fehler, wenn ich den Code in SPOJ (Laufzeitfehler (NZEC)) einreiche.PRIME1 - Prime Generator Java

Könnte jemand bitte mir dabei helfen.

Hier ist, was ich bisher versucht:

class Main { 
    public static void main(String[] args) throws java.lang.Exception { 


     Scanner n1 = new Scanner(System.in); 
     Scanner n3 = new Scanner(System.in); 
     int n2 = n1.nextInt(); 
     int[][] n4 = new int[n2][2]; 

     for (int i = 0; i < n2; i++) { 
      String[] s2 = n3.nextLine().split(" "); 
      for (int j = 0; j < 2; j++) { 
       n4[i][j] = Integer.parseInt(s2[j]); 
       } 
      } 
     for (int i = 0; i < n2; i++){ 
      for(int j=n4[i][0];j<=n4[i][1];j++){ 
       if(isPrimeNumber(j)){ 
        System.out.println(j); 
        } 

       } 
      System.out.println(); 
      } 

     } 



    public static boolean isPrimeNumber(int number) { 
     if (number == 2 || number == 3) { 
      return true; 
      } 
     if (number % 2 == 0) { 
      return false; 
      } 
     int sqrt = (int) Math.sqrt(number) + 1; 
     for (int i = 3; i < sqrt; i += 2) { 
      if (number % i == 0) { 
     return false; 
     } 
      } 
     return true; 
     } 

    } 
+0

Gibt es Gründe, zu verwenden 2 Scanner? Du hast normalerweise mehr als genug mit nur einem .... –

+0

Hi..ich habe es mit nur einem Scanner versucht. Aber irgendwie funktioniert der Code nicht, wenn ich .nextLine() und .nextInt() Funktionen auf dem gleichen Scanner verwende. Ich bin neu in diesem Bereich. Bitte lass es mich wissen, wenn ich es falsch benutze. – avg998877

Antwort

1

erste Sache, die Sie den Scanner richtig verwenden tun müssen, und nutzen Sie die 2. ein rid off ..

Sie 2-Scanner verwenden, da nur ein funktioniert nicht wie erwartet, warum? weil Sie vergessen, dass die Scanner#nextInt Methode nicht das letzte Newline-Zeichen Ihrer Eingabe verbraucht, und somit wird das Newline in den nächsten Aufruf Scanner # nextline verbraucht

Versuchen Sie folgendes:

public static void main(String[] args) throws ParseException { 
     Scanner input = new Scanner(System.in); 
     int n2 = input.nextInt(); 
     input.nextLine(); 
     int[][] n4 = new int[n2][2]; 

     for (int i = 0; i < n2; i++) { 
      String string2 = input.nextLine(); 
      String[] s2 = string2.split(" "); 
      for (int j = 0; j < 2; j++) { 
       n4[i][j] = Integer.parseInt(s2[j]); 
      } 
     } 
     for (int i = 0; i < n2; i++) { 
      for (int j = n4[i][0]; j <= n4[i][1]; j++) { 
       if (isPrimeNumber(j)) { 
        System.out.println(j); 
       } 

      } 
      System.out.println(); 
     } 

    } 


    public static boolean isPrimeNumber(int number) { 
     if (number == 2 || number == 3) { 
      return true; 
     } 
     if (number % 2 == 0) { 
      return false; 
     } 
     int sqrt = (int) Math.sqrt(number) + 1; 
     for (int i = 3; i < sqrt; i += 2) { 
      if (number % i == 0) { 
       return false; 
      } 
     } 
     return true; 
    } 

} 
+0

Sir, das ist hilfreich. Aber ich kann immer noch nicht das ganze Konzept von Scanner verstehen. Gibt es einen Artikel, der ausführlich erklärt hat? Vielen Dank für Ihre Hilfe – avg998877

+0

Die offizielle Dokumentation ... ist das Beste in meiner Meinung ... –