내 코드에서 프로그램은 사용자가 입력 한 텍스트에 따라 무언가를 수행합니다. 내 코드는 다음과 같습니다
switch (name) {
case text1: {
//blah
break;
}
case text2: {
//blah
break;
}
case text3: {
//blah
break;
}
case text4: {
//blah
break;
}
그러나 코드 내부의 경우 text1와 text4동일합니다. 따라서 다음과 같은 것을 구현할 수 있는지 궁금합니다.
case text1||text4: {
//blah
break;
}
나는 알고 ||작업자가 case 문에없는 일이지만 비슷한 뭔가 내가 사용할 수 있습니다 것입니다.
답변
CASE다음과 같이 두 가지 진술을 모두 사용할 수 있습니다 .
case text1:
case text4:{
//blah
break;
}
이 예 참조 : 코드 예는 특정 달의 일 수를 계산합니다.
class SwitchDemo {
public static void main(String[] args) {
int month = 2;
int year = 2000;
int numDays = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
if (((year % 4 == 0) &&
!(year % 100 == 0))
|| (year % 400 == 0))
numDays = 29;
else
numDays = 28;
break;
default:
System.out.println("Invalid month.");
break;
}
System.out.println("Number of Days = "
+ numDays);
}
}
이것은 코드의 출력입니다.
Number of Days = 29
실패로 끝나다:
또 다른 관심 지점은 브레이크 선언입니다. 각 break 문은 둘러싸는 switch 문을 종료합니다. 제어 흐름은 스위치 블록 다음에 오는 첫 번째 명령문으로 계속됩니다. 스위치 블록에 명령문이 없으면 break 문이 필요
fall합니다. 일치하는 case 레이블 뒤의 모든 명령문은 break case가 나타날 때까지 후속 케이스 레이블의 표현식에 관계없이 순서대로 실행됩니다.
through
예제 코드 :
public class SwitchFallThrough {
public static void main(String[] args) {
java.util.ArrayList<String> futureMonths =
new java.util.ArrayList<String>();
int month = 8;
switch (month) {
case 1: futureMonths.add("January");
case 2: futureMonths.add("February");
case 3: futureMonths.add("March");
case 4: futureMonths.add("April");
case 5: futureMonths.add("May");
case 6: futureMonths.add("June");
case 7: futureMonths.add("July");
case 8: futureMonths.add("August");
case 9: futureMonths.add("September");
case 10: futureMonths.add("October");
case 11: futureMonths.add("November");
case 12: futureMonths.add("December");
default: break;
}
if (futureMonths.isEmpty()) {
System.out.println("Invalid month number");
} else {
for (String monthName : futureMonths) {
System.out.println(monthName);
}
}
}
}
이것은 코드의 출력입니다.
August
September
October
November
December
스위치 명령문에서 문자열 사용
Java SE 7 이상에서는 switch 문의 표현식에 String 객체를 사용할 수 있습니다. 다음 코드 예제는 month라는 문자열 값을 기준으로 월 수를 표시합니다.
public class StringSwitchDemo {
public static int getMonthNumber(String month) {
int monthNumber = 0;
if (month == null) {
return monthNumber;
}
switch (month.toLowerCase()) {
case "january":
monthNumber = 1;
break;
case "february":
monthNumber = 2;
break;
case "march":
monthNumber = 3;
break;
case "april":
monthNumber = 4;
break;
case "may":
monthNumber = 5;
break;
case "june":
monthNumber = 6;
break;
case "july":
monthNumber = 7;
break;
case "august":
monthNumber = 8;
break;
case "september":
monthNumber = 9;
break;
case "october":
monthNumber = 10;
break;
case "november":
monthNumber = 11;
break;
case "december":
monthNumber = 12;
break;
default:
monthNumber = 0;
break;
}
return monthNumber;
}
public static void main(String[] args) {
String month = "August";
int returnedMonthNumber =
StringSwitchDemo.getMonthNumber(month);
if (returnedMonthNumber == 0) {
System.out.println("Invalid month");
} else {
System.out.println(returnedMonthNumber);
}
}
}
이 코드의 출력은 8입니다.
답변
당신은 다음과 같이 할 수 있습니다 :
case text1:
case text4: {
//blah
break;
}
답변
case값은있는 동일한 항목 포인트를 공유 할 수 있습니다 “고토”포인트 코드없는 :
case text1:
case text4:
//blah
break;
중괄호는 중복입니다.
답변
그냥 해
case text1: case text4:
do stuff;
break;
답변
JDK-12 초기 액세스 빌드에서 JEP 325 : Switch Expressions (Preview) 의 통합으로 이제 새로운 형식의 스위치 레이블을 다음과 같이 사용할 수 있습니다.
case text1, text4 -> {
//blah
}
또는 답변 중 하나 에서 데모를 바꾸려면 :-
public class RephraseDemo {
public static void main(String[] args) {
int month = 9;
int year = 2018;
int numDays = 0;
switch (month) {
case 1, 3, 5, 7, 8, 10, 12 ->{
numDays = 31;
}
case 4, 6, 9, 11 ->{
numDays = 30;
}
case 2 ->{
if (((year % 4 == 0) &&
!(year % 100 == 0))
|| (year % 400 == 0))
numDays = 29;
else
numDays = 28;
}
default ->{
System.out.println("Invalid month.");
}
}
System.out.println("Number of Days = " + numDays);
}
}
– 여기 당신이 그것을 시도 줄 수있는 방법입니다 메이븐과 함께 컴파일시 JDK12 미리보기 기능을
답변
괄호는 불필요합니다. 그냥 해
case text1:
case text4:
doSomethingHere();
break;
case text2:
doSomethingElse()
break;
호기심이 많은 사람을 케이스 폴 스루라고합니다. 이를 수행 할 수있는 능력이 break;사례 진술을 끝내야 하는 이유 입니다. 자세한 정보는 wikipedia 기사 http://en.wikipedia.org/wiki/Switch_statement를 참조하십시오 .
답변
fallthrough다른 사람들 의 대답은 좋은 것입니다.
그러나 또 다른 접근법은 사례 진술의 내용에서 메소드를 추출한 다음 각 사례에서 적절한 메소드를 호출하는 것입니다.
아래 예에서 ‘text1’과 ‘text4’는 모두 동일하게 작동합니다.
switch (name) {
case text1: {
method1();
break;
}
case text2: {
method2();
break;
}
case text3: {
method3();
break;
}
case text4: {
method1();
break;
}
필자는 개인적으로 이러한 스타일의 쓰기 사례 문장이 유지 관리가 쉽고 약간 더 읽기 쉽다는 것을 알고 있습니다.
