2016-04-28 5 views
0

Ok Also mein Programm ist es, eine URL vom Benutzer zu einer Datenbank zu erhalten und diese Datenbasis zu verarbeiten, indem man den Durchschnitt berechnet und diesen anzeigt. Mein Algorithmus dafür funktioniert tadellos das Problem, das ich habe, ist mit der Behandlung der URL Ausnahme. Wenn ein Benutzer eine ungültige URL eingibt, möchte ich, dass er es erneut versucht und eine korrekte URL eingibt, aber wenn die Benutzer die URL erneut eingeben, werden keine Daten von der URL verarbeitet und ich bekomme "NaN" in der Ausgabe. Unten ist der Versuch, Blöcke zu fangen, da ich glaube, dass das Problem dort liegt, bitte helfen Sie, wenn Sie können.Try-Catch Block nicht die Ausnahme behandeln die Art, wie ich dazu tendiere

// Test-URL // URL-Gehalt = neue URL ("http://cs.armstrong.edu/liang/data/Salary.txt");

System.out.println("Enter The URL to the File "); 
    Scanner UserInput = new Scanner(System.in); 


    try 
    { 

     //Ask The User to Input the URL 

     URL salary = new URL(UserInput.nextLine()); 



     Scanner Read = new Scanner(salary.openStream()); 



     while(Read.hasNextLine()) 
     { 

      for(int i = 0; i < Faculty.length; i++) 
      { 



       String Firstname = Read.next(); 


       String Lastname = Read.next(); 

       String rank = Read.next(); 

       double Salary = Read.nextDouble(); 


       if(rank.matches("assistant")) 

       { 
        Faculty[i] = new AssistantProfessor(Firstname, Lastname, rank, Salary); 
        allAssistantProff[i] = new AssistantProfessor(Firstname, Lastname, rank, Salary); 
        AssistantProfessors++; 
       } 

       if(rank.matches("associate")) 

       { 
        Faculty[i] = new AssociateProfessor(Firstname, Lastname, rank ,Salary); 
        allAssociateProff[i] = new AssociateProfessor(Firstname, Lastname, rank ,Salary); 
        AssociateProfessors++; 
       } 

       if(rank.matches("full")) 
       { 

        Faculty[i] = new FullProfessor(Firstname, Lastname, rank, Salary); 
        allFullProff[i] = new FullProfessor(Firstname, Lastname, rank, Salary); 
        FullProfessors++; 
       } 

        //System.out.println(Faculty[i]); 
        //System.out.println(allAssistantProff[i]); 
        //System.out.println(allAssociateProff[i]); 
        //System.out.println(allFullProff[i]); 



     } 


     } 


    } 



    catch(MalformedURLException ex) 
    { 

     System.out.println("invalid URL" + " Try Again "); 
     URL salary = new URL(UserInput.nextLine()); 
    } 
+0

Also, erhalten Sie irgendeine Ausnahme? Ich meine, reicht die Kontrolle, um Block zu fangen? – tesnik03

+0

Dies ist kein Debugging-Service. Verwenden Sie einen Debugger selbst. – Raedwald

Antwort

0

Haben Sie versucht, den Code auszuführen, indem Sie zwei gültige URLs nacheinander eingeben?

Ich frage dies, da ich keine äußere Weile sehe, oder "zurückspringen", die den "Scanner lesen = neuen Scanner (salary.openStream())" neu starten würde; Linie

, wenn Sie einen äußeren Rücksprung haben, können Sie ein lokales Variable Gehalt in der Ausnahmebehandlung deklarieren, dass dies ein Problem tho

0

Bewegen Sie möglicherweise nicht Ihr nach dem „}“ im catch-Block wird gelöscht try-catch in eine Schleife, wie folgt:

System.out.println("Enter The URL to the File "); 
Scanner UserInput = new Scanner(System.in); 
Scanner Read; 
while (true) { 
    try { 
    URL salary = new URL(UserInput.nextLine()); 
    Read = new Scanner(salary.openStream()); 
    break; 
    } catch(IOException ex) { 
    System.out.println("Couldn't open URL. Try again."); 
    } 
} 
while(Read.hasNextLine()) { 
    /* Process your file as usual. */ 
} 
Verwandte Themen