2016-10-30 6 views
1

ファイルの場所とファイル名を呼び出して文字列配列にするプログラムを作成しています。プログラムはコンパイルされますが、実行するとコンソールエラーが発生します。私はJavaで新しく、これらのコンソールエラーのトラブルシューティング方法や原因についてはわかりません。誰かが私を助けることができれば、それは素晴らしいだろう。私は2つの誤りがあるところにコメントを記した。最初のエラーはメインメソッドにあり、もう1つはbubblesortメソッドにあります。ディスクファイルプログラムを呼び出す際のコンソールエラー

EDIT: これは私が受信エラー、Assignment7.bubbleSortで

スレッドでの例外java.lang.String.compareToで "メイン" のjava.lang.NullPointerException (不明なソース) (Assignment7です。 java:63) at Assignment7.main(Assignment7.java:21)

そして、私がそれをクリックすると、私はここで私が指摘している場所につながります。

import java.io.*; 
import java.util.*; 

public class program3 { 

public static void main(String[] args) throws IOException { 


    String[] list2, targets, list1; 
    list1 = getInput("C:\\Desktop\\input1.txt");  
    list2 = bubbleSort(list1);      //Console error here 
    targets = getInput("C:\\Desktop\\targets1.txt"); 

    double seqAvg = seqSearch(list1, targets); 
    double binAvg = binSearch(list2, targets); 
    System.out.println("Average number of searches for the seqeuntial search is " + seqAvg); 
    System.out.println("Average number of searches for the binary search is " + binAvg); 

}//end of main method 

public static String[] getInput(String filename) throws IOException { 
    String[] inputArr = new String[100]; 

    Scanner in = new Scanner(new File(filename)); 
    int count = 0; 
    while(in.hasNext()) { 
     if (count < 100){ 
      inputArr[count++] = in.next(); 
     } else { 
      break; 
     } 

     }  
    in.close(); 
    return inputArr; 

}// end getInput method 



//This method will sort the array and pass it onto a list. 
    public static String[]bubbleSort(String[] inputArr) { 

    String[] Array2 = inputArr.clone(); 

    for (int i = 0; i<Array2.length; i++) 
    { 
     for (int j = 0; j<Array2.length; j++) 
     { 
      if (Array2[i].compareTo(Array2[i+1]) > 0) //Console error here 
      { 
       String temp = Array2[i]; 
       Array2[i] = Array2[j]; 
       Array2[j] = temp; 
      } 
     } 
    } 
    return Array2; 

}// End of sort method. 

//This method will do a sequential search on the list1 
public static double seqSearch(String[] list1, String[] targets){ 
     { 
      for (int j = 0; j < list1.length; j++) 
      { 
       for(String str:targets){ 
       if(list1[j].equalsIgnoreCase(str)){ 
        return j; 
       } 
      } 
      { 
       return j; 
      } 
     } 
     return -1; 
     } 

}//end of sequentialSearch method 


//This method will do a binary search on the list 
public static int binSearch(String[] list1, String[] targets) { 
     int lo = 0; 
     int hi = list1.length - 1; 
     int mid = -1; 

     while(lo <= hi) { 
      mid = (lo+hi)/2; 

      for(String str:targets){ 
      if(list1[mid].equalsIgnoreCase(str)){ 
       return mid; 
      } 

      hi = mid-1; 


      } for(String str:targets){ 
      if(list1[mid].equalsIgnoreCase(str)){ 
       return mid; 
      } 
     } 

      lo = mid+1; 
      { 
      return mid; 
      } 
     } 
     return mid; 
     } 

}//End of program3 
+2

「コンソールエラー」とは何ですか?あなたの投稿を編集し、完全なスタックトレースを含めてください。また、_ "ファイルの場所とファイル名を呼び出して文字列配列にします" _は意味がありません。どうか明らかにしてください。 –

+1

* "C:\\ Desktop" *これは通常のデスクトップへのパスではありません。独自のディレクトリを作成しましたか? – Tom

答えて

0

あなたは、このためのラインでバブルソート方法でArrayIndexOutOfBoundsExceptionを取得する:私は+ 1

if (Array2[i].compareTo(Array2[i+1]) > 0) 

インデックスが配列の長さより大きいです。 この方法でバブルソート方法のループを変更することをお勧めします。

for (int i = 0; i<Array2.length; i++) 
{ 
    for (int j = 0; j<Array2.length-1; j++) 
    { 
     if (Array2[j].compareTo(Array2[j+1]) > 0) 
     { 
     String temp = Array2[j]; 
     Array2[j] = Array2[j+1]; 
     Array2[j+1] = temp; 
     } 
    } 
} 
関連する問題