2017-01-22 19 views
0

arrayindexoutofbound例外からコードを修正するいくつかの方法を試した後、例外を生成しない方法がありますが、プログラムはそれを出力しません。例外またはエラーを示し、プログラムが終了していないことを示します。ここで、コードは次のとおりです。以前の過ちからプログラムは実行も終了もしません

import java.util.*; 

public class treez { 

final Scanner in; 
public treez() 
{ 
    in=new Scanner(System.in); 
    run(); 
    in.close(); 

} 
public void run() 
{ 
    System.out.println("Enter normal restaurant numbers and pho restaurant numbers"); 
    final String input=in.nextLine(); 
    final int[] rest=createarray(input); 
    final int normal=rest[0]; 
    final int pho=rest[1]; 
    final String input1=in.nextLine(); 
    final int[] phoresspecific=createarray(input1); 
    Arrays.sort(phoresspecific); 
    boolean[][] matrix; 
    matrix=new boolean[normal][normal]; 
    for(int i=0;i<normal;i++) 
    { 
     for(int j=0;j<normal;j++) 
     { 
      matrix[i][j]=false; 
     } 
    } 
    int[] total=new int[normal]; 

    for(int i=0;i<matrix.length;i++) matrix[i]=new boolean[normal]; 
    for(int i=0;i<normal;i++) 
    { 
     total[i]=i; 
     total[i]=Arrays.binarySearch(total, i); 
    } 
    Arrays.sort(total); 
    for(int i=0 ; i < normal - 1; i++) { 
     int x = 0; 
     int y = 0; 
     String ans = in.nextLine(); 
     int[] arraya = createaarray(ans); 
     x = arraya[0]; 
     y = arraya[1]; 
     matrix[x][y]= true; 
     matrix[y][x]=true; 
    } 
    in.close(); 
    int answer=decisions(pho,matrix,phoresspecific,normal); 
    System.out.println(answer); 
} 
private int decisions(int pho, boolean matrix[][],int[] phoresspecific,int normal) 
{ 
    int steps=0; 
    if(pho==2) 
    { 
     for(int j=0;j<normal-1;j++) 
     { 
      for(int i=phoresspecific[0];i<normal-1;i++) 
      { 
       if(matrix[j][i]==true) 
       { 
        j++; 
        steps++; 
        if(j==phoresspecific[1]) break; 
       } 
      } 
      if(j==phoresspecific[1]) break; 
     } 
    } 
    else 
    { 
     int counter=0; 
     int[] step=new int[pho-1]; 
     for(int j=0;j<pho-1;j++) 
     { 
      counter=0; 
      for(int i=0;i<normal-1;i++) 
      { 
       for(int l=phoresspecific[j];l<normal-1;l+=0) 
       { 
        if(matrix[i][l]==true) 
        { 
         i++; 
         step[j]++; 
         if(i==j) 
         { 
          counter++; 
         } 

        } 
       } 
       if(counter==pho) break; 
      } 
     } 
     Arrays.sort(step); 
     steps=step[0]; 
    } 
    steps--; 
    return(steps); 
} 
private int[] createarray(final String input) 
{ 
    final String[] args=input.trim().split("\\s+"); 
    final int[] list=new int[2]; 
    for(int i=0;i<2;i++) 
     list[i]=Integer.parseInt(args[i]); 

    return list; 
} 
private int[] createaarray(final String ans) 
{ 
    final String[] args=ans.trim().split("\\s+"); 
    final int[] list=new int[2]; 
    for(int i=0;i<2;i++) 
     list[i]=Integer.parseInt(args[i]); 

    return list; 
} 

public static void main(String args[]) 
{ 

    new treez(); 
} 
} 

、私はエラーがライン83または85のいずれかであると信じて、されている:

for(int l=phoresspecific[j];l<normal-1;l+=0) 
       { 
        if(matrix[i][l]==true) 
        { 
         i++; 
         step[j]++; 
         if(i==j) 
         { 
          counter++; 
         } 

        } 
       } 

for(int l=phoresspecific[j];l<normal-1;l+=0) 
       { 
        if(matrix[i][l]==true) 

入力して:

8 5 
0 6 4 3 7 
0 1 
0 2 
2 3 
4 3 
6 1 
1 5 
7 3 

このプログラムは、出力を生成したり、終了したりします。ヘルプをいただければ幸いです。 編集:例外:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8 
at treez.decisions(treez.java:85) 
at treez.run(treez.java:52) 
at treez.<init>(treez.java:9) 
at treez.main(treez.java:127) 

EDIT2:このプログラムは、すべての場所に到達する人のために使用される最小時間を決定するために使用され、それから1分かかりますので、何の辺の重みはありません、入力ライン2から書きましたある場所から別の場所へ2行目以降の行には、aとbを結ぶ道路があります。

+1

ArrayIndexOutOfBoundsExceptionが発生したときにスタックトレースを表示してください –

+3

Soooは深くネストされた、完全に文書化されていないメソッドをデバッグすることが予想されていました。コードが何を詳細に記述してください。そしてbtw。通常は[MCVE](http://stackoverflow.com/help/mcve)が必要です。完全なコードではありません。 – Paul

答えて

0

ビルド構成をチェックしましたか? あなたのプログラムに関する多くの情報を提供していない場合、そのような種類のエラーを見つけにくいです。 編集:私はそれを実行することができたし、あなたがプログラムしていることを確認することができます(あなたの入力は何も返されず、すべてのコードをステップスルーしませんでした) あなたは常に "createarray"実装された時間と同じ関数(渡した値の名前のexept)です。 そして、あなたは、このコードで無限ループがあります。内側のforループdoesntのは、その値をインクリメント

for(int i=0;i<normal-1;i++){ 
     for(int l=phoresspecific[j];l<normal-1;l+=0){ 
      if(matrix[i][l]==true){ 
       i++; 
       step[j]++; 
       if(i==j) counter++; 
      } 
     } 
    if(counter==pho) break; 
    } 

を、常に条件ウィッヒは常に変化したことがないインデックスlによる同じ滞在するかどうかを評価しようとしています。それはおそらくあなたのエラーです。 もう1つのEDIT: パラメータの2行目には2つ以上の値がありますが、関数は常に2つのパラメータのみを読み込みます。

+0

@ 97hilfelこの問題を解決する方法はありますか? – Ian

+0

@lan私はどんなアイデアでもありませんし、あなたがそこで何をしているのか本当に分かっていませんが、常に同じ条件をチェックするので、0の代わりに1をインクリメントしたいので、配列の – 97hilfel

関連する問題