2017-01-22 117 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) 

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

        } 
       } 

隨着輸入:

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

該程序將nei產生輸出或終止。幫助將不勝感激。 編輯:異常:

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:這個程序是用於確定用於人的最短時間到達所有的位置從輸入線中寫道2.有沒有邊的權重,因爲它需要一分鐘一個到另一個地方。第二行之後的所有行指出連接地點a和b的道路。

+1

當發生ArrayIndexOutOfBoundsException異常時,請顯示堆棧跟蹤 –

+3

Sooo需要調試深度嵌套的,完全未記錄的方法,而且即使沒有絲毫提示,它也會執行什麼操作?請詳細說明代碼的作用。順便說一句。通常需要[MCVE](http://stackoverflow.com/help/mcve);不是完整的代碼。 – Paul

回答

0

你檢查了你的構建配置嗎? 當你沒有提供有關你的程序的大量信息時,它很難尋找可能的錯誤。 編輯:我設法讓它運行,並可以確認你的程序(與你的輸入不返回任何東西,我沒有步低谷每一塊代碼) 但你總是使用「createarray」函數,你有兩個執行時間和它的相同功能(不包括你傳遞的值的名稱)。 然後你有一個無限循環在這個代碼:

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; 
    } 

內的for循環犯規增加其價值,並總是試圖評估如果條件至極將始終保持不變,由於從來沒有改變指數L。這可能是你的錯誤。 另一編輯: 在你的參數的第二行中,你有兩個以上的值,但你的函數總是隻讀取兩個參數。

+0

@ 97hilfel你有什麼想法如何解決這個問題? – Ian

+0

@lan我沒有任何想法,我真的不知道你在做什麼,但你總是檢查相同的條件,所以也許你想增加1而不是0,所以你不總是檢查同一個領域的陣列。 – 97hilfel