Compiler-Fehler variable cannot be resolved / duplicate local variable

Watnuss

Mitglied
Hallo,

könnt ihr mir bitte sagen, wieso es hier eine Compilermeldung gibt und wie ich sie wegbekomme?
Semantisch sollte das Programm ja correct ablaufen

[JAVA=31] public static void connectToWebsite(int websiteNr, String searchParameter) throws IOException{

Document doc = null;
System.out.println("Processing ...");

switch (websiteNr)
{
case 1:
Document doc = Jsoup.connect("http://www.billiger.de/suche.html?search=1&order=s_price&searchstring=" + searchParameter).get();
break;

case 2:
Document doc = Jsoup.connect("http://www.guenstiger.de/Katalog/Preis.pl?suche=" + searchParameter).get();
break;

case 3:
;
break;

default:
System.err.println("Wrong input 'websiteNr' @connectToWebsite");
break;
}[/code]

Die Compilererrors:

Code:
Errors (2 items)
    Duplicate local variable doc (line 39)
    Duplicate local variable doc (line 43)

Was mache ich verkehrt? Ich kann es nicht sehen...
 
Zuletzt bearbeitet:
doc muss vor dem switch-Statement deklariert werden.

Hintergrund: die geschweiften Klammern des switch-Statements bilden einen eigenen Sichtbarkeitsbereich. Hier deklarierte Variablen sind lokal für diesen Bereich und außerhalb nicht sichtbar.
 
Danke, so bekomme ich das "cannot be resolved" weg.

Aber er meldet mir immer noch "duplicate local veriable doc"

Ich hab den Quellcode nochmal editiert, wie es jetzt ausschaut.
Das mit dem Gültigkeitsbereich war n dummer Fehler von mir, aber warum meckert er immer noch?
 
das war kein dummer Fehler, du weißt einfach komplett nicht was du tust,
leider kann ich in deinen bisherigen 6 Postings kein einziges mit normalen Code zitieren

bevor du kompliziertes 'connectToWebsite', XML-Document usw. programmierst, gar ein switch ist schon vergleichsweise hoch,
wie wäre es mit Seite 1 eines Java-Lehrbuchs, wie geht man mit den elementarsten Grundlagen um?
was fällt dir an folgenden Code auf:

Java:
int x = 4;
int x = x+5;
vs.
Java:
int x = 4;
x = x+5;
?
 
Danke, so bekomme ich das "cannot be resolved" weg.

Aber er meldet mir immer noch "duplicate local veriable doc"

Ich hab den Quellcode nochmal editiert, wie es jetzt ausschaut.
Das mit dem Gültigkeitsbereich war n dummer Fehler von mir, aber warum meckert er immer noch?

In den case Anweisungen muss das "Document" vor dem doc weg.
Die Variable wurde ja schon deklariert, daher ist das "Document" nun unnötig und erzeugt so nur eine neue Variable (Daher "duplicate")
 
Ich hab "Java ist eine Insel" bis Kapitel 5 gelesen. Bloß lernt man halt nichts allein durch lesen. Wenn ich am Anfang Fehler mache, ist das denke ich normal.

Und aus Fehlern lernt man ja bekanntlich. Von daher danke für das aufzeigen was falsch ist.
 
Ich knüpf hier mal direkt an.
Java:
public class Switch {
	public static void main(String[] args) {
		int i = 0;
		switch (i) {
			case 0:
				int j = 0;
				return;
			default:
				int j = 0;
				return;
		}
	}
}
Hier wird mir auch nicht ganz klar, wieso der Compiler meckert. Ist er einfach nicht "klug" genug, um zu sehen, dass sich die beiden Variablen nie in den Weg kommen?
 
das stimmt, alle switch-Bereiche werden zusammengezählt, finde ich auch nicht schön,
man kann { } setzen

edit:
wobei Klugheit nicht reicht, eine normale Methode mit erlaubten
Java:
                int j = 0;
                return;

                int j = 0;
                return;
hintereinander wäre ja nun wirklich auch nicht erstrebenswert,
wenn dann müssten die case generell eigene Sichtbarkeitsbereiche sein, so wie if else mit Klammern
 
Zuletzt bearbeitet von einem Moderator:
Und was ist dann bei
Java:
public class Switch {
    public static void main(String[] args) {
        int i = 0;
        switch (i) {
            case 0:
                int j = 0;
             case 1:
                int j = 0;
            default:
                int j = 0;
                return;
        }
    }
}

Da ist der Fehler ja berechtigt.
 
falls du dich auch auf mein Posting beziehst:
kommt darauf an, man kann ein Durchfallen ohne break; auch erlauben, ohne dass die vorherigen Variablen sichbar sein müssen,
vergleichbar mit entsprechend verknüpften mehreren if-Bedingungen, nun eben ohne else

zu kompliziert? mag sein, deswegen ist es vielleicht wie es ist, aus meiner bisherigen Sicht hätte ich nix gegen eine Umstellung
 
Ah, {}-Blöcke kann man jederzeit einsetzen, um eigene Gültigkeitsbereiche zu definieren. Auch nett. 🙂
Ein eigener Gültigkeitsbereich für einzelne cases (wenn gebreakt (oh je, tolles Denglisch :autsch🙂 wird) und für mehrere cases (wenn man durchfallen lässt) wäre auf jeden Fall nicht schlecht.
 

Zurück
Oben