2016-03-20 13 views
-1

Ich versuche, eine Lösung für eine problem zu implementieren. Der Code funktioniert wie ein Zauber in Eclipse aber gibt es folgende Ausnahmen, wenn in Hacker Rang IDE zusammengestellt:Getting java.util.NoSuchElementException

Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Scanner.java:862) 
    at java.util.Scanner.next(Scanner.java:1485) 
    at java.util.Scanner.nextInt(Scanner.java:2117) 
    at java.util.Scanner.nextInt(Scanner.java:2076) 
    at Solution.main(Solution.java:17) 

Hier ist der Code

import java.util.Scanner; 
class Ideone { 
    public static void main(String[] args) throws Exception { 
     Scanner input=new Scanner(System.in); 

     int test_case = input.nextInt(); 
     //System.out.println("test case"+test_case); 

     String ans[] = new String[test_case]; 

     for (int i = 0; i < test_case; i++) { 
      int row = input.nextInt(); 
      int col =input.nextInt(); 
      //System.out.println("row:"+ row+" col: "+col); 
      Result result = new Result(row, col); 
      result.putRandom(); 
      //result.display(); 
      result.getPattern(); 
      ans[i] = result.match(); 

     } 

     for (int i = 0; i < ans.length; i++) { 
      System.out.println(ans[i]); 
     } 

    } 

} 

class Result { 
    String[] matrix; 
    int rows; 
    int col; 

    int pattern_row; 
    int pattern_col; 
    String[] pattern_matrix; 
    Scanner inp=new Scanner(System.in); 

    public Result(int r, int c) { 
     rows = r; 
     col = c; 
     matrix = new String[rows]; 
    } 

    public void putRandom() throws Exception { 
     // System.out.println("Row:"+rows+" Colems:"+col); 
    //Scanner inp = new Scanner(System.in); 
     for (int i = 0; i < rows; i++) { 
      matrix[i] =inp.nextLine(); 
      //System.out.println("matrix[i] : "+matrix[i]); 
     } 
    } 

    public void display() { 
     for (int i = 0; i < rows; i++) { 
      System.out.print(matrix[i] + " "); 
      System.out.println(); 
     } 
    } 

    public void getPattern() throws Exception{ 
     int r= inp.nextInt(); 
     int c =inp.nextInt(); 

     pattern_row = r; 
     pattern_col = c; 
     //System.out.println("pAttern row"+pattern_row); 
     pattern_matrix = new String[pattern_row]; 
     putRandomInPattern(); 
    } 

    public void putRandomInPattern() throws Exception{ 
     //Scanner inp = new Scanner(System.in); 
     inp.nextLine(); 
     for (int i = 0; i < pattern_row; i++) { 
      pattern_matrix[i] = inp.nextLine(); 
     } 
     //display(); 
    } 

    public String match() { 
     String result = "NO"; 
     for (int r = 0; r < pattern_row; r++) { 
      int index = find(pattern_matrix[r]); 
      if (index != -1) { 
       result = isPatternPresent(index, r); 
       return result; 
      } 
     } 
     return result; 
    } 

    public String isPatternPresent(int index_matrix, int index_pattern) { 
     int matched = 0; 
     int j = index_pattern; 
     for (int i = index_matrix; i < (index_matrix+(pattern_row)); i++) { 
      if (matrix[i].contains(pattern_matrix[j])) { 
       matched++; 
       j++; 
      } 
     } 
     //System.out.println("matched:" + matched); 
     if (matched == pattern_row) 
      return "YES"; 
     return "NO"; 
    } 

    public int find(String elem) { 
     for (int i = 0; i < matrix.length; i++) { 
      if (matrix[i].contains(elem)) { 
       //System.out.println("found" + matrix[i]); 
       return i; 
      } 
     } 
     return -1; 
    } 

} 
+0

Sie haben zwei verschiedene Instanzen von 'new Scanner (System.in)'. Du solltest nur eins haben. Eine schnelle Lösung besteht darin, die erste an den 'new Result()' -Konstruktor zu übergeben. – Andreas

Antwort

0

etwas in diesem Teil geschieht

for (int i = 0; i < rows; i++) { 
     matrix[i] =inp.nextLine(); 
     //System.out.println("matrix[i] : "+matrix[i]); 
    } 

Ich denke, dass Sie den Scanner in die putRandom() -Methode übergeben sollten, wenn Sie es verwenden, anstatt einen neuen Scanner in dieser Klasse zu erstellen, der hackerrank

01 verheerend sein könnte
public void putRandom(Scanner scannerName) throws Exception { 
    Scanner inp = scannerName; 
    for (int i = 0; i < rows; i++) { 
     matrix[i] =inp.nextLine(); 
    } 
    inp.close(); 
} 
+0

Ich habe das auch versucht, aber es gibt immer noch den gleichen Fehler :( –

Verwandte Themen