2015-12-11 1 views
0

mon ami et moi avons le même code exact, mais seulement le mien apparaît avec une ligne nulle. Nous sommes tous les deux très novices en matière de codage, donc nous ne savons pas vraiment quoi faire, ni comment y remédier, d'autant plus que cela semble fonctionner pour elle. Java me dit que monDeux personnes avec le même code, un seul a une exception NullPointerException?

StringTokenizer st= new StringTokenizer(bf.readLine()); 

est nulle. J'ai lu en ligne que je peux utiliser une méthode try-catch pour exécuter mon programme avec la ligne nulle. Cependant, ma fenêtre de terminal doit imprimer d'une certaine manière (pour mon professeur), donc je ne peux pas avoir la méthode try-catch en laissant une ligne d'impression supplémentaire quand je l'exécute. Si quelqu'un a des solutions, s'il vous plaît faites le moi savoir! Aussi, si quelqu'un pouvait expliquer comment un code peut avoir une ligne nulle pour une personne, et pas l'autre serait génial, parce que je ne sais vraiment pas pourquoi cela fonctionne pour elle, et pas moi.

Voici mon code complet, j'ai indiqué quelle ligne contient la ligne nulle.

import java.util.Scanner; 
import java.io.*; 
import java.util.*; 
public class QuizGrading 
{ 
    public static void main (String[]args) throws IOException 
{ 
    ///key part 
    System.out.println(" "); 

    BufferedReader bf = new BufferedReader(new FileReader("key.in")); 
    StringTokenizer st = new StringTokenizer(bf.readLine()); **(NULL)** 

    int num = Integer.parseInt(st.nextToken()); 
    int [] key = new int[num]; 

    st=new StringTokenizer(bf.readLine()); 
    for (int i=0; i<num; i++) 
    { 
     int an = Integer.parseInt(st.nextToken()); 
     key[i] = an; 
    } 
    ///answer part 



    BufferedReader br = new BufferedReader(new FileReader("tenQuizzes.in")); 
    StringTokenizer answers = new StringTokenizer(br.readLine()); 
    int stu=1; 
    int numq = Integer.parseInt(answers.nextToken()); 
    for (int u=0; u<numq; u++) 
    { 
     int right=0; 
     answers = new StringTokenizer(br.readLine()); 
     for (int s=0; s<num; s++) 
     { 
      int ans=Integer.parseInt(answers.nextToken()); 
      if (ans==key[s]) 
      { 
       right=right+1; 
      } 
     } 
     double percent = right*100/num; 

     System.out.println("There are "+right+" questions correct."); 
     System.out.println("Student "+stu+" scored "+percent+"%."); 
     System.out.println(" "); 
     stu=stu+1; 
    } 
    System.out.println(" "); 
} 

}

+0

Il est fort probable que votre programme Java ne trouve pas le fichier 'key.in' et que vous obteniez une exception' NullPointerException' lorsque vous essayez d'y accéder. –

+0

Le fichier key.in est vide. – usman

+0

Vous ne devriez pas utiliser un 'FileReader' nu; cela utilisera le codage de caractères par défaut de votre plate-forme, et il peut différer d'une plateforme à l'autre. En outre, nous sommes en 2015, utilisez plutôt 'Files.newBufferedReader()' à la place. – fge

Répondre

4

BufferedReader.readLine() renvoie null si la fin du fichier est atteinte. Je suppose que vous ne lisez pas le même fichier. Le fichier à l'origine du NPE peut être vide après tout.

+0

J'ai re-téléchargé les deux fichiers key.in et tenQuizzes.in et ça a marché! Il semble que mon fichier key.in était vide ... bizarre, vu que je viens de le télécharger au même endroit qu'avant. Je vous remercie! –

0

La chose est que le FileReader n'est pas en mesure de localiser le nom de fichier "key.in" dans votre machine. BufferedReader bf = nouveau BufferedReader (nouveau FileReader ("key.in"));

Cependant, il a été trouvé dans la machine de votre ami.

+2

Ensuite, ce serait une exception IOFileNotFound, pas une exception nullPointer –

+0

D'accord avec la réponse BetaRide. – KayV