Why is initializing a string in an if statement different than in a switch statement?
I'm learning Java and I'm making simple programs to find the season that a month is in, based off some book examples. These two classes demonstrate two ways of testing a value: if/else if statement, and switch statement. The thing i'm confused with is the string that is used to hold the season. When I declare it as just String season;
it works with the if statements. But with the switch statement, doing that produces a "The local variable season may not have been initialized" error.
public class IfElse {
public static void main(String args) {
int month = 5;
String season;
// isn't initialized, works fine
if(month == 12 || month == 1 || month == 2)
season = "Winter";
else if(month == 3 || month == 4 || month == 5)
season = "Spring";
else if(month == 6 || month == 7 || month == 8)
season = "Summer";
else
season = "Fall";
// this is okay
System.out.println("May is a " + season + " month.");
}
}
Not initializing season at the same time as declaration works fine for the above code, but the season variable in the last println()
for the switch produces an error if it's declared the same way.
The following code doesn't work:
public class Switch {
public static void main(String args) {
int month = 5;
String season;
// HAS to be initialized, currently causes error
switch(month) {
case(12):
case(1):
case(2):
season = "Winter";
break;
case(3):
case(4):
case(5):
season = "Spring";
break;
case(6):
case(7):
case(8):
season = "Summer";
break;
case(9):
case(10):
case(11):
season = "Fall";
break;
default:
System.out.println("Invalid month");
break;
}
System.out.println("May is a " + season + " month");
} // produces an error if season isn't initialized to null or ""
}
What causes this? Is it the braces enclosing the switch statement? How is initializing a string inside an if statement any different than initializing it inside a switch statement?
Sorry if this is extremely obvious or if it seems like a dumb question.
java string if-statement switch-statement
New contributor
add a comment |
I'm learning Java and I'm making simple programs to find the season that a month is in, based off some book examples. These two classes demonstrate two ways of testing a value: if/else if statement, and switch statement. The thing i'm confused with is the string that is used to hold the season. When I declare it as just String season;
it works with the if statements. But with the switch statement, doing that produces a "The local variable season may not have been initialized" error.
public class IfElse {
public static void main(String args) {
int month = 5;
String season;
// isn't initialized, works fine
if(month == 12 || month == 1 || month == 2)
season = "Winter";
else if(month == 3 || month == 4 || month == 5)
season = "Spring";
else if(month == 6 || month == 7 || month == 8)
season = "Summer";
else
season = "Fall";
// this is okay
System.out.println("May is a " + season + " month.");
}
}
Not initializing season at the same time as declaration works fine for the above code, but the season variable in the last println()
for the switch produces an error if it's declared the same way.
The following code doesn't work:
public class Switch {
public static void main(String args) {
int month = 5;
String season;
// HAS to be initialized, currently causes error
switch(month) {
case(12):
case(1):
case(2):
season = "Winter";
break;
case(3):
case(4):
case(5):
season = "Spring";
break;
case(6):
case(7):
case(8):
season = "Summer";
break;
case(9):
case(10):
case(11):
season = "Fall";
break;
default:
System.out.println("Invalid month");
break;
}
System.out.println("May is a " + season + " month");
} // produces an error if season isn't initialized to null or ""
}
What causes this? Is it the braces enclosing the switch statement? How is initializing a string inside an if statement any different than initializing it inside a switch statement?
Sorry if this is extremely obvious or if it seems like a dumb question.
java string if-statement switch-statement
New contributor
add a comment |
I'm learning Java and I'm making simple programs to find the season that a month is in, based off some book examples. These two classes demonstrate two ways of testing a value: if/else if statement, and switch statement. The thing i'm confused with is the string that is used to hold the season. When I declare it as just String season;
it works with the if statements. But with the switch statement, doing that produces a "The local variable season may not have been initialized" error.
public class IfElse {
public static void main(String args) {
int month = 5;
String season;
// isn't initialized, works fine
if(month == 12 || month == 1 || month == 2)
season = "Winter";
else if(month == 3 || month == 4 || month == 5)
season = "Spring";
else if(month == 6 || month == 7 || month == 8)
season = "Summer";
else
season = "Fall";
// this is okay
System.out.println("May is a " + season + " month.");
}
}
Not initializing season at the same time as declaration works fine for the above code, but the season variable in the last println()
for the switch produces an error if it's declared the same way.
The following code doesn't work:
public class Switch {
public static void main(String args) {
int month = 5;
String season;
// HAS to be initialized, currently causes error
switch(month) {
case(12):
case(1):
case(2):
season = "Winter";
break;
case(3):
case(4):
case(5):
season = "Spring";
break;
case(6):
case(7):
case(8):
season = "Summer";
break;
case(9):
case(10):
case(11):
season = "Fall";
break;
default:
System.out.println("Invalid month");
break;
}
System.out.println("May is a " + season + " month");
} // produces an error if season isn't initialized to null or ""
}
What causes this? Is it the braces enclosing the switch statement? How is initializing a string inside an if statement any different than initializing it inside a switch statement?
Sorry if this is extremely obvious or if it seems like a dumb question.
java string if-statement switch-statement
New contributor
I'm learning Java and I'm making simple programs to find the season that a month is in, based off some book examples. These two classes demonstrate two ways of testing a value: if/else if statement, and switch statement. The thing i'm confused with is the string that is used to hold the season. When I declare it as just String season;
it works with the if statements. But with the switch statement, doing that produces a "The local variable season may not have been initialized" error.
public class IfElse {
public static void main(String args) {
int month = 5;
String season;
// isn't initialized, works fine
if(month == 12 || month == 1 || month == 2)
season = "Winter";
else if(month == 3 || month == 4 || month == 5)
season = "Spring";
else if(month == 6 || month == 7 || month == 8)
season = "Summer";
else
season = "Fall";
// this is okay
System.out.println("May is a " + season + " month.");
}
}
Not initializing season at the same time as declaration works fine for the above code, but the season variable in the last println()
for the switch produces an error if it's declared the same way.
The following code doesn't work:
public class Switch {
public static void main(String args) {
int month = 5;
String season;
// HAS to be initialized, currently causes error
switch(month) {
case(12):
case(1):
case(2):
season = "Winter";
break;
case(3):
case(4):
case(5):
season = "Spring";
break;
case(6):
case(7):
case(8):
season = "Summer";
break;
case(9):
case(10):
case(11):
season = "Fall";
break;
default:
System.out.println("Invalid month");
break;
}
System.out.println("May is a " + season + " month");
} // produces an error if season isn't initialized to null or ""
}
What causes this? Is it the braces enclosing the switch statement? How is initializing a string inside an if statement any different than initializing it inside a switch statement?
Sorry if this is extremely obvious or if it seems like a dumb question.
java string if-statement switch-statement
java string if-statement switch-statement
New contributor
New contributor
New contributor
asked 1 hour ago
jkofskie
383
383
New contributor
New contributor
add a comment |
add a comment |
4 Answers
4
active
oldest
votes
That is because you did not specify what season has to be in the default case. What happens when month is not within 1-12? season will not be initialized.
if you are expecting strictly only 1-12 as month input, then you might want to consider throwing an Exception
in default:
default:
throw new IllegalArgumentException("Invalid month");
2
And to point out a small bug in the question askers if/else implementation, the else will set any invalid month toFall
. If month was set to 42, it would printFall
.
– DrZoo
1 hour ago
@DrZoo that is correct
– mkjh
1 hour ago
@DrZoo You're completely right. I did that out of laziness because I knew I would never set the month value out of range, but that also meant that there would never be a situation where season is uninitialized. Changing the else to an else if also gave me the same error as in the switch statement. So I now realize my problem was with when the variable is (or isn't) being given a value.
– jkofskie
1 hour ago
add a comment |
In your if
/else
code, there is an assurance that the variable season
will get a value. That is, the else
statement.
Your switch
code does not have it. Look what will happen to the variable season
if the given value for month is 13
-- it will not get a value, and will remain un-initialised.
add a comment |
In your first example, there is no path through the code that fails to assign a value to 'season'. In the second example, the default case does not assign a value, so the last print ("May is...") can be executed with an uninitialized value.
Yeah, for some reason I subconsciously assumed that would only be an issue if the value for month was actually out of the defined range, but I forgot Java doesn't work like that.
– jkofskie
7 mins ago
add a comment |
You should use this
public class Switch {
public static void main(String args) {
int month = 5;
String season;
// HAS to be initialized, currently causes error
switch(month) {
case 12:
case 1:
case 2:
season = "Winter";
break;
case 3:
case 4:
case 5:
season = "Spring";
break;
case 6 :
case 7 :
case 8 :
season = "Summer";
break;
case 9 :
case 10 :
case 11 :
season = "Fall";
break;
default:
season = "Invalid";
break;
}
System.out.println("May is a " + season + " month");
} // produces an error if season isn't initialized to null or ""
}
New contributor
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
jkofskie is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54032729%2fwhy-is-initializing-a-string-in-an-if-statement-different-than-in-a-switch-state%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
That is because you did not specify what season has to be in the default case. What happens when month is not within 1-12? season will not be initialized.
if you are expecting strictly only 1-12 as month input, then you might want to consider throwing an Exception
in default:
default:
throw new IllegalArgumentException("Invalid month");
2
And to point out a small bug in the question askers if/else implementation, the else will set any invalid month toFall
. If month was set to 42, it would printFall
.
– DrZoo
1 hour ago
@DrZoo that is correct
– mkjh
1 hour ago
@DrZoo You're completely right. I did that out of laziness because I knew I would never set the month value out of range, but that also meant that there would never be a situation where season is uninitialized. Changing the else to an else if also gave me the same error as in the switch statement. So I now realize my problem was with when the variable is (or isn't) being given a value.
– jkofskie
1 hour ago
add a comment |
That is because you did not specify what season has to be in the default case. What happens when month is not within 1-12? season will not be initialized.
if you are expecting strictly only 1-12 as month input, then you might want to consider throwing an Exception
in default:
default:
throw new IllegalArgumentException("Invalid month");
2
And to point out a small bug in the question askers if/else implementation, the else will set any invalid month toFall
. If month was set to 42, it would printFall
.
– DrZoo
1 hour ago
@DrZoo that is correct
– mkjh
1 hour ago
@DrZoo You're completely right. I did that out of laziness because I knew I would never set the month value out of range, but that also meant that there would never be a situation where season is uninitialized. Changing the else to an else if also gave me the same error as in the switch statement. So I now realize my problem was with when the variable is (or isn't) being given a value.
– jkofskie
1 hour ago
add a comment |
That is because you did not specify what season has to be in the default case. What happens when month is not within 1-12? season will not be initialized.
if you are expecting strictly only 1-12 as month input, then you might want to consider throwing an Exception
in default:
default:
throw new IllegalArgumentException("Invalid month");
That is because you did not specify what season has to be in the default case. What happens when month is not within 1-12? season will not be initialized.
if you are expecting strictly only 1-12 as month input, then you might want to consider throwing an Exception
in default:
default:
throw new IllegalArgumentException("Invalid month");
edited 1 hour ago
answered 1 hour ago
mkjh
615316
615316
2
And to point out a small bug in the question askers if/else implementation, the else will set any invalid month toFall
. If month was set to 42, it would printFall
.
– DrZoo
1 hour ago
@DrZoo that is correct
– mkjh
1 hour ago
@DrZoo You're completely right. I did that out of laziness because I knew I would never set the month value out of range, but that also meant that there would never be a situation where season is uninitialized. Changing the else to an else if also gave me the same error as in the switch statement. So I now realize my problem was with when the variable is (or isn't) being given a value.
– jkofskie
1 hour ago
add a comment |
2
And to point out a small bug in the question askers if/else implementation, the else will set any invalid month toFall
. If month was set to 42, it would printFall
.
– DrZoo
1 hour ago
@DrZoo that is correct
– mkjh
1 hour ago
@DrZoo You're completely right. I did that out of laziness because I knew I would never set the month value out of range, but that also meant that there would never be a situation where season is uninitialized. Changing the else to an else if also gave me the same error as in the switch statement. So I now realize my problem was with when the variable is (or isn't) being given a value.
– jkofskie
1 hour ago
2
2
And to point out a small bug in the question askers if/else implementation, the else will set any invalid month to
Fall
. If month was set to 42, it would print Fall
.– DrZoo
1 hour ago
And to point out a small bug in the question askers if/else implementation, the else will set any invalid month to
Fall
. If month was set to 42, it would print Fall
.– DrZoo
1 hour ago
@DrZoo that is correct
– mkjh
1 hour ago
@DrZoo that is correct
– mkjh
1 hour ago
@DrZoo You're completely right. I did that out of laziness because I knew I would never set the month value out of range, but that also meant that there would never be a situation where season is uninitialized. Changing the else to an else if also gave me the same error as in the switch statement. So I now realize my problem was with when the variable is (or isn't) being given a value.
– jkofskie
1 hour ago
@DrZoo You're completely right. I did that out of laziness because I knew I would never set the month value out of range, but that also meant that there would never be a situation where season is uninitialized. Changing the else to an else if also gave me the same error as in the switch statement. So I now realize my problem was with when the variable is (or isn't) being given a value.
– jkofskie
1 hour ago
add a comment |
In your if
/else
code, there is an assurance that the variable season
will get a value. That is, the else
statement.
Your switch
code does not have it. Look what will happen to the variable season
if the given value for month is 13
-- it will not get a value, and will remain un-initialised.
add a comment |
In your if
/else
code, there is an assurance that the variable season
will get a value. That is, the else
statement.
Your switch
code does not have it. Look what will happen to the variable season
if the given value for month is 13
-- it will not get a value, and will remain un-initialised.
add a comment |
In your if
/else
code, there is an assurance that the variable season
will get a value. That is, the else
statement.
Your switch
code does not have it. Look what will happen to the variable season
if the given value for month is 13
-- it will not get a value, and will remain un-initialised.
In your if
/else
code, there is an assurance that the variable season
will get a value. That is, the else
statement.
Your switch
code does not have it. Look what will happen to the variable season
if the given value for month is 13
-- it will not get a value, and will remain un-initialised.
answered 1 hour ago
KaNa0011
130110
130110
add a comment |
add a comment |
In your first example, there is no path through the code that fails to assign a value to 'season'. In the second example, the default case does not assign a value, so the last print ("May is...") can be executed with an uninitialized value.
Yeah, for some reason I subconsciously assumed that would only be an issue if the value for month was actually out of the defined range, but I forgot Java doesn't work like that.
– jkofskie
7 mins ago
add a comment |
In your first example, there is no path through the code that fails to assign a value to 'season'. In the second example, the default case does not assign a value, so the last print ("May is...") can be executed with an uninitialized value.
Yeah, for some reason I subconsciously assumed that would only be an issue if the value for month was actually out of the defined range, but I forgot Java doesn't work like that.
– jkofskie
7 mins ago
add a comment |
In your first example, there is no path through the code that fails to assign a value to 'season'. In the second example, the default case does not assign a value, so the last print ("May is...") can be executed with an uninitialized value.
In your first example, there is no path through the code that fails to assign a value to 'season'. In the second example, the default case does not assign a value, so the last print ("May is...") can be executed with an uninitialized value.
answered 1 hour ago
another-dave
4245
4245
Yeah, for some reason I subconsciously assumed that would only be an issue if the value for month was actually out of the defined range, but I forgot Java doesn't work like that.
– jkofskie
7 mins ago
add a comment |
Yeah, for some reason I subconsciously assumed that would only be an issue if the value for month was actually out of the defined range, but I forgot Java doesn't work like that.
– jkofskie
7 mins ago
Yeah, for some reason I subconsciously assumed that would only be an issue if the value for month was actually out of the defined range, but I forgot Java doesn't work like that.
– jkofskie
7 mins ago
Yeah, for some reason I subconsciously assumed that would only be an issue if the value for month was actually out of the defined range, but I forgot Java doesn't work like that.
– jkofskie
7 mins ago
add a comment |
You should use this
public class Switch {
public static void main(String args) {
int month = 5;
String season;
// HAS to be initialized, currently causes error
switch(month) {
case 12:
case 1:
case 2:
season = "Winter";
break;
case 3:
case 4:
case 5:
season = "Spring";
break;
case 6 :
case 7 :
case 8 :
season = "Summer";
break;
case 9 :
case 10 :
case 11 :
season = "Fall";
break;
default:
season = "Invalid";
break;
}
System.out.println("May is a " + season + " month");
} // produces an error if season isn't initialized to null or ""
}
New contributor
add a comment |
You should use this
public class Switch {
public static void main(String args) {
int month = 5;
String season;
// HAS to be initialized, currently causes error
switch(month) {
case 12:
case 1:
case 2:
season = "Winter";
break;
case 3:
case 4:
case 5:
season = "Spring";
break;
case 6 :
case 7 :
case 8 :
season = "Summer";
break;
case 9 :
case 10 :
case 11 :
season = "Fall";
break;
default:
season = "Invalid";
break;
}
System.out.println("May is a " + season + " month");
} // produces an error if season isn't initialized to null or ""
}
New contributor
add a comment |
You should use this
public class Switch {
public static void main(String args) {
int month = 5;
String season;
// HAS to be initialized, currently causes error
switch(month) {
case 12:
case 1:
case 2:
season = "Winter";
break;
case 3:
case 4:
case 5:
season = "Spring";
break;
case 6 :
case 7 :
case 8 :
season = "Summer";
break;
case 9 :
case 10 :
case 11 :
season = "Fall";
break;
default:
season = "Invalid";
break;
}
System.out.println("May is a " + season + " month");
} // produces an error if season isn't initialized to null or ""
}
New contributor
You should use this
public class Switch {
public static void main(String args) {
int month = 5;
String season;
// HAS to be initialized, currently causes error
switch(month) {
case 12:
case 1:
case 2:
season = "Winter";
break;
case 3:
case 4:
case 5:
season = "Spring";
break;
case 6 :
case 7 :
case 8 :
season = "Summer";
break;
case 9 :
case 10 :
case 11 :
season = "Fall";
break;
default:
season = "Invalid";
break;
}
System.out.println("May is a " + season + " month");
} // produces an error if season isn't initialized to null or ""
}
New contributor
New contributor
answered 1 hour ago
Alperen Gezgin
11
11
New contributor
New contributor
add a comment |
add a comment |
jkofskie is a new contributor. Be nice, and check out our Code of Conduct.
jkofskie is a new contributor. Be nice, and check out our Code of Conduct.
jkofskie is a new contributor. Be nice, and check out our Code of Conduct.
jkofskie is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54032729%2fwhy-is-initializing-a-string-in-an-if-statement-different-than-in-a-switch-state%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown