2017-06-02 5 views
-2

Ich bin neu in der Codierung mit Java, also bitte geben Sie mir eine Pause.kann nicht in Variable aufgelöst werden

Während dieser Code ausgeführt wird,

public class operators { 

public static int getMonthNumber(String monthName) { 
    int monthNumber; 
    switch (monthName) { 
    case "January": monthNumber=1; 
    break; 
    case "February": monthNumber=2; 
    break; 
    default: monthNumber=0; 

    } 


} 
public static void main(String[] args) { 
    operators.getMonthNumber("January"); 
    System.out.println(monthNumber); 
     } 
} 

ich diese Nachricht erhalten, „kann Monthnumber nicht zu einer Variablen aufgelöst werden“. Ich verstehe nicht, warum es nicht nur die ganze Zahl drucken 1. Ich die Lösung wissen

operators.getMonthNumber("January"); 

mit diesem

int returnedMonthNumber=operators.getMonthNumber("January"); 

ersetzen würde Warum kann nicht gedruckt werden nur die ganze Zahl 1 ohne eine Variable der ganzen Zahl zuweisen?

+0

Ihr Code wird nicht einmal kompiliert. Bitte lesen [mcve]. In diesem Sinne: bitte verstehen Sie, dass diese Seite keine Programmierschule ist, wo wir die absoluten Grundlagen erklären und Ihre Syntaxfehler für Sie beheben. – GhostCat

Antwort

1

Wie andere gesagt haben, diesen Standort für das Erlernen der Grundlagen der Sprache keine Schule ist. Aber früher oder später werden die Leute wahrscheinlich hierher kommen, um eine Antwort auf Ihre genaue Frage zu finden.

Sie haben einen großen Missverständnis wie Java funktioniert. In Ihrem Code machen Sie zwei Fehler. Als erstes versuchen Sie, auf eine Variable zuzugreifen, die bereits verschwunden wäre, wenn Sie darauf zugreifen könnten. Und zweitens versuchen Sie, auf eine Variable zuzugreifen, von der Sie nicht "sehen" können. Ihr Code:

public static void main(String[] args) { 
    operators.getMonthNumber("January"); 
    System.out.println(monthNumber); 
} 

Weitere Informationen über erste Problem: Sie deklarieren die Variable Monthnumber in Ihrer Methode getMonthNumber. Es existiert also nur für die Dauer der Methode. Wenn die Methode aufgerufen wird, ist die Variable also vorhanden. Nach der Methode ist die Variable verschwunden. Es wird weggeworfen. Aber eine Kopie des Werts der Variablen wird in Ihrer Methode zurückgegeben. Sie können also die Kopie nehmen und in eine neue Variable einfügen und sie verwenden oder direkt verwenden. Darauf haben Sie mit

hingewiesen int returnedMonthNumber = operators.getMonthNumber ("Januar");

Ich kenne keine Programmiersprache, die so funktioniert, wie Sie es erwarten.Und wenn es einen gäbe, wäre es nicht wirklich populär, weil dies viele Bugs verursachen könnte, weil ein Tippfehler dazu führen könnte, dass das Programm eine völlig andere Variable verwendet, die Sie nicht verwenden wollten.

Weitere Informationen zum zweiten Problem: Im Allgemeinen sind Variablen nur in Klammern zugänglich. Das bedeutet, Variablen, die innerhalb von {} deklariert sind, sind nur innerhalb derselben Klammern oder Klammern innerhalb dieser Klammern zugänglich. Beispiel:

public static void main(String[] args) { // first bracket 

    final int dollar = 2; 
    System.out.println("i can access dollar: " + dollar); 

    { 
     final int euro = 33; 
     System.out.println("I can access dollar: " + dollar + ", and i can access euro: " + euro); 
    } 

    // you have to remove +euro to compile this: 
    System.out.println("But i cant access euro because i am outside the brackets where euro is declared: " + euro); 
} 

Behalten Sie diese Regel im Kopf, da sie immer funktioniert. Es funktioniert mit Methoden, mit ifs, mit while/for/do while usw. Wenn der Compiler eine Variable nicht sehen kann, ist es wahrscheinlich ein Tippfehler oder der falsche Block.

Ich habe viele Anfänger gesehen, die sagen, dass etwas wie du sagtest. Sie fragen sich: "Warum wird der Compiler nicht wissen, was ich will? Es ist offensichtlich!". Aber es ist eigentlich nicht offensichtlich. Das Verhalten, das Sie erwarten, ist nur "nützlich" in Ihrem Kopf. Es könnte Ihnen eine halbe Codezeile sparen. Aber in irgendeinem fortgeschritteneren Beispiel werden Sie sehen, dass es eine wirklich schlechte Idee wäre, es so zu implementieren, wie Sie es erwarten. Und jeder Anfänger erkennt das irgendwann: Wenn Sie sich wundern, warum der Compiler nicht etwas tun wird, was Sie wollen, dann haben Sie ihm einfach nicht gesagt, was er tun soll. Wenn du weißt, was ich meine.

1

Die Variable 'monthNumber' existiert nur innerhalb der getMonthNumber() -Methode. Wenn Sie es aufrufen, ohne dem Ergebnis etwas zuzuweisen, geht das Ergebnis verloren.

Sie können jedoch Folgendes tun - dies übergibt das Ergebnis Ihres Anrufs direkt zum Aufruf println().

System.out.println(operators.getMonthNumber("January")); 
1

Der obige Code sieht nicht, wie es

public static int getMonthNumber(String monthName) { 
    int monthNumber; 
    switch (monthName) { 
    case "January": monthNumber=1; 
    break; 
    case "February": monthNumber=2; 
    break; 
    default: monthNumber=0; 

    } 

// You need to return something 

return monthNumber; 

} 

Dann rufen Sie können es

System.out.println(operators.getMonthNumber("January")); 
1
System.out.println(operators.getMonthNumber("January")); 

Pass direkt zu Druckverfahren zusammenstellen würde, die dafür sorgen, wird von der Rest. Der Grund dafür, dass println es direkt drucken kann, ist, dass es überlastet ist.

Es gibt so viele überladene Methoden der Print System.out:

println(boolean x) 
println(char x) 
println(int x) 
println(long x) 
println(float x) 
println(double x) 
println(char x[]) 
println(String x) 
println(Object x) 
Verwandte Themen