Variables in different switch cases can't have the same name?
java, switch-statement, syntax-error, variables
Solution
How about not declaring the variables at all?
switch (tokensLeft) {
case 3:
rawListener.binaryInfo(
tokens.nextToken(),
parseInt(tokens.nextToken()),
tokens.nextToken(),
this);
break;
case 2:
rawListener.binaryInfo(
tokens.nextToken(),
parseInt(tokens.nextToken()),
this);
break;
default:
throw new IllegalArgumentException("Method call binaryInfo could not be done because: \"Wrong number of parameters\"");
}
I added a `static` import for `Integer.parseInt`.
Better yet call your logic in well named methods from the `switch` and declare whatever variables you want:
public void parseTokens() {
switch (tokensLeft) {
case 3:
parseThreeTokens(rawListener, tokens);
break;
case 2:
parseTwoTokens(rawListener, tokens);
break;
default:
throw new IllegalArgumentException("Method call binaryInfo could not be done because: \"Wrong number of parameters\"");
}
}
public void parseThreeTokens(final RawListener rawListener, final Tokens tokens) {
final String id = tokens.nextToken();
final String value = tokens.nextToken();
final String trailerId = tokens.nextToken();
rawListener.binaryInfo(id, parseInt(value), trailerId, this);
}
public void parseTwoTokens(final RawListener rawListener, final Tokens tokens) {
final String id = tokens.nextToken();
final String value = tokens.nextToken();
rawListener.binaryInfo(id, parseInt(value), this);
}
Problem
I was refactoring some code to make it easier to read and I ran into something that I find weird and I was wondering if anyone could explain this to me. Original code: ``` if(tokensLeft == 3) { String id = tokens.nextToken(); String value = tokens.nextToken(); String trailerId = tokens.nextToken(); rawListener.binaryInfo(id, Integer.parseInt(value), trailerId, this); } else if(tokensLeft == 2) { String id = tokens.nextToken(); String value = tokens.nextToken(); rawListener.binaryInfo(id, Integer.parseInt(value), this); } else { System.out.println("Method call binaryInfo could not be done because: \"Wrong number of parameters\""); } ``` After refactoring: ``` switch(tokensLeft) { case 3: String id = tokens.nextToken(); String value = tokens.nextToken(); String trailerId = tokens.nextToken(); rawListener.binaryInfo(id, Integer.parseInt(value), trailerId, this); break; case 2: String id = tokens.nextToken(); // Syntax error String value = tokens.nextToken(); // Syntax error rawListener.binaryInfo(id, Integer.parseInt(value), this); break; default: System.out.println("Method call binaryInfo could not be done because: \"Wrong number of parameters\""); break; } ``` At first glance this looks perfectly reasonable, but this gives me a syntax error. Link all references for a local rename (does not change references in other files) It turns out that for some reason in a switch statement, I am unable to use the `String id` and `String value` again in a different case. This makes naming my variables rather awkward. Now you could say: "Just declare your variables above your switch statement." But that would mean that I always create my variables, even if `tokensLeft` is neither 3 or 2 and I wouldn't need my variables. That just feels like using unnecessary memory. Can anyone explain to me why the switch case does this and how I could solve my problem?