2017-01-25 3 views
0

Ich versuche, eine Liste der längsten Wörter aus jeder Zeile in einem Textblock zu bekommen. Ich kann nicht die Informationen von meinem Haupt, das in processing.class ist, drucken. Die Information wird in Tools.class verarbeitet. und es gibt auch eine Counters.class, die beteiligt ist, aber es ist unveränderlich.Warum bekomme ich diese Compiler-Warnung?

Allerdings gibt es mir diese Warnung: The value of the local variable longestWords is not used in meinem Zähler-Code, auf der Linie, wo ich erkläre longestWords =h;. Warum ist das und wie kann ich es beheben?

Dies ist mein Code:

(Verarbeitung)

longestWords = stat.getLongestWords(); 
    for(i = 0; i < longestWords.size(); i++){ 
     System.out.print(longestWords.get(i)); 
    } 

Fehler ausgelöst: Exception in thread "main" java.lang.NullPointerException bei deol5210_a1.Processing.main (Processing.java:66)

, die für die Punkte (i = 0; i < longestWords.size(); i ++) { (tools)

}else { 

      currentWord = lineScanner.next(); 

      if(currentWord.contains("$")){ 

       currentWord.replace("$", ""); 
       moneySpent += Double.parseDouble(currentWord.replace("$", "")); 

      }else if (currentWord.length() > lineLongestWord.length()){ 
       lineLongestWord = currentWord; 

      } 

      if(currentWord.length() > longestWord.length()){ 

       longestWord = currentWord; 
       lineLongestWord = currentWord; 
       wordCount++; 

      } else { 

       wordCount++; 

      } 

(Zähler)

public ArrayList<String> getLongestWords(){ 
    return longestWords; 
} 

public Counters(int a, double b, int c, int d, double e, double f, String g, ArrayList<String> h){ 
    lineCount = a; 
    avgWordCount = b; 
    wordCount = c; 
    purchaseCount = d; 
    moneySpent = e; 
    avgSpent = f; 
    longestWord = g; 
    ArrayList<String> longestWords = h; 

} 
+0

Was ist Ihre Frage? – shmosel

+1

Es ist nur eine Warnung, dass Sie nie diese Variable verwenden. – Gatusko

+0

Ich kann den Inhalt des Arrays nicht in meiner Verarbeitungsklasse drucken. Es gibt mir die Null-Null-Wahrnehmung. Ich bemerkte, dass ich es falsch gedruckt habe. Ich habe den Druckcode so geändert, dass longestWords.get (i) verwendet wird, aber jetzt wird die NullPointerException ausgelöst. –

Antwort

1

eine Variable Initialisierung unterscheidet sich von ihm mit, die Warnung verschwindet, wenn Sie die Variable verwenden (ausdrucken, geben sie sich auf ein Verfahren, usw.).

Im Grunde ist es das gleiche wie zu sagen:

int i = 0; 

und dann nicht mit i etwas zu tun.

Die Aussage

ArrayList<String> longestWords = h; 

erstellt eine neue lokale Variable longestWords und dann tut nichts damit, wenn Sie ein Mitglied namens longestWords die statementshould einfach sein:

longestWords = h; 
+0

Das war das Problem, danke! Ich musste nur ArrayList von longonestWords = h entfernen; –

+0

großartig! Bitte akzeptiere meine Antwort dann :) – monkeyStix

0

Ein weiterer Kritikpunkt, die Sie nie deklarieren Sie die Variable i, aber Sie versuchen, es einem Wert zuzuweisen. Sie müssen die folgenden Änderungen:

for(i = 0; i < longestWords.size(); i++) 

zu

for(int i = 0; i < longestWords.size(); i++) 

Wie für Ihre Warnung, Sie longestWords innerhalb des Blocks Umfang Ihres Counters Konstruktor deklarieren. Dies ist höchstwahrscheinlich eine Instanzvariable innerhalb Counters, keine private Variable innerhalb des Konstruktors.

Löschen Sie die Deklaration dort und verwenden Sie stattdessen die Variable, die wahrscheinlich in Ihrer Klasse bereits definiert ist. Von:

ArrayList<String> longestWords = h; 

zu

longestWords = h; 
0

Java-Variablen haben etwas "scope" bezeichnet. Eine Variable, die innerhalb einer Methode deklariert wird, wie Ihre longestWords Variable, ist eine lokale Variable. Ihr Umfang ist auf diese Methode beschränkt.Das bedeutet, dass außerhalb dieser Methode die Definition longestWords, wie sie in der Methode deklariert ist, nicht existiert. Sie versuchen, auf eine lokale Variable von außerhalb der Methode zuzugreifen, in der sie deklariert wurde. Per Definition existiert eine lokale Variable nicht außerhalb der Methode, in der sie deklariert wird.

Wenn Sie eine Variable in mehreren Methoden verwenden möchten, müssen Sie sie außerhalb von Methoden deklarieren, um sie zu einer globalen Variablen zu machen.

Wenn es eine lokale Variable gibt, die mit demselben Namen wie eine globale Variable deklariert ist, bezieht sich dieser Variablenname auf die lokale Variable innerhalb der Methode und auf die globale Variable außerhalb der Methode (da die lokale Variable doesn ist) existiert nicht außerhalb der Methode, in der es deklariert wurde. Wenn Sie diese Variable innerhalb der Methode initialisieren, wirkt sich dies nicht auf den Wert der globalen Variablen aus.

Verwandte Themen