2016-10-30 5 views
1

Ich schreibe ein Programm, das einen Dateispeicherort und einen Dateinamen aufruft und in ein String-Array verwandelt. Das Programm kompiliert, aber wenn es ausgeführt wird, kommt es mit Konsolenfehlern zurück. Ich bin neu in Java und ich weiß nicht, wie ich diese Konsolenfehler beheben kann oder warum sie auftreten. Wenn mir jemand helfen könnte, wäre das großartig. Ich habe mit Kommentaren markiert, wo die zwei Fehler sind. Der erste Fehler ist in der Hauptmethode und der andere in der bubblesort-Methode.Konsolenfehler beim Aufrufen des Festplatten-Dateiprogramms

EDIT: Dies ist der Fehler I erhalten,

Exception in thread "main" java.lang.NullPointerException bei java.lang.String.compareTo (Unknown Source) bei Assignment7.bubbleSort (Assignment7. java: 63) bei Assignment7.main (Assignment7.java:21)

und wenn ich darauf klicke, führen sie mich dahin, wo ich unten hingewiesen habe.

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

Was ist ein "Konsolenfehler"? Bitte [bearbeiten] Sie Ihren Beitrag und fügen Sie den kompletten Stack-Trace hinzu. Auch _ "ruft einen Dateispeicherort und Dateinamen auf und macht es zu einem String-Array" _ macht keinen Sinn. Bitte klären Sie. –

+1

* "C: \\ Desktop" * Dies ist nicht der übliche Pfad zum Desktop. Haben Sie Ihr eigenes Verzeichnis erstellt? – Tom

Antwort

0

Sie erhalten eine ArrayIndexOutOfBoundsException weil in der BubbleSort Methode bei dieser Zeile:

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

Index i + 1 ist größer als die Feldlänge. Ich empfehle Ihnen, die Schleife in der Blase Sortiermethode auf diese Weise ändern:

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