2016-03-20 4 views
-1

problemのソリューションを実装しようとしています。コードはEclipseの魅力のように動作しますが、ハッカーランクIDEでコンパイルした場合には、以下の例外を与える:ここで 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) 

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

「新しいスキャナ(System.in)」の2つのインスタンスがあります。あなたは1つしか持っていないはずです。簡単な解決策の1つは、最初のものを 'new Result()'コンストラクタに渡すことです。 – Andreas

答えて

0

何かがこの部分

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

で起こっているコードです私は、あなたがそれを使用するときに、そのクラスで新しいスキャナを作成する代わりに、putRandom()メソッドにスキャナを渡すべきだと思うhackerrankを台無しにするかもしれない

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

私もこれを試しましたが、それでも同じエラーが出ます: –

関連する問題