2013-02-26 2 views
3

이 오류의 원인을 잘 모릅니다. 선생님과 나는 그 일을보고 잘못 된 것을 발견하지 못했습니다. 그러나, 그것은 또한 f를 위해 그것을 던져, 행 :상수 표현식이 필요합니까? (Java switch statement)

import java.util.Scanner; 
public class MailAssignment 
{ 
public static void main(String [] args){ 

    Scanner userinput = new Scanner(System.in); 
    char p; 
    char f; 
    double price = 0; 
    System.out.println("First class or priority?"); 
    char type = userinput.next().charAt(0); 
    System.out.println("How much does the package weigh? (in ounces)"); 
    double weight = userinput.nextDouble(); 

    switch (type){ 
    case p: 
    if (weight > 16) 
     price = weight * 3.95; 

     else if (weight > 32) 
      price = (1.20 * (weight/16)); 
     else 
      price = 3.50 * weight; 


     break; 


    case f: 
    if (weight < 1) 
    price = 0.34; 

    else if (weight > 1) 
    price = 0.34 + (weight * 21); 

    else if (weight > 13) 
    price = weight * 3.95; 

     else if (weight > 32) 
      price = 1.20 * (weight/16); 
     else 
      price = 3.50 * weight; 

      break; 

     }  

    System.out.println("Your price is: " +price); 
    } 
} 

그것은 오류가 컴파일 때와는 케이스 페이지를 가리키는 "필요한 상수 표현을"던졌습니다 나는 내가 완전히 꺼 일을해야을 전환하는 경우 .

+1

'final'로 선언되지 않은 변수는 case 문에서 사용할 수 없습니다. –

+1

나는 비슷한 것을 시도해 보았습니다. 변수가 final 인 경우에도 동일한 오류가 발생합니다. –

답변

9

예, case 표현식은 상수 (또는 열거 형 상수 이름) 여야합니다. 변수는 사용할 수 없습니다. 자세한 내용은 Java Language Specification section 14.11 (switch statements)을 참조하십시오. (당신은 변수를 초기화하지 않았다, 그래서 당신이 정직하게, 일이 기대했던 분명하지 않다.)

당신이 찾으 셨나요?

case 'p': 
    ... 

case 'f': 
    ... 

? 문자 (type)와 문자 리터럴'p''f'이 일치합니다.

당신은 당신의 case 문에서 변수를 사용할 수 없습니다

+0

또는 명확히하기 위해, 사건은 그 변수의 이름이 아니라 VALUE에 대한 것이므로, 변수 유형 = 'p'의 값이 'f'일 경우이 경우 –

+0

@JeffHawthorne : 어떤 변수의 값은? 'type'이라면, 예를 들어'p'보다는'type'이 분명합니다. 간단히 말해, 귀하의 의견이 실제로 더 명확하게 보이지 않는지 확신하지 못합니다 ... –

+0

저는 상수 단어에서 벗어나려고 노력했지만 리터럴은 더 나은 단어이지만 "유형"은 변수이므로 우리는 타입의 가치, 나는 상수가 물건을 혼란스럽게 할 수도 있다고 생각했다. –

1

(이 선생님을 난처한 상황에 빠진 경우 옆으로, 나는.이 합리적으로 기본적인 것들이다. 그들이 자바를 가르 칠 수있는 방법에 적합에 대한 문제가) , 리터럴 char이어야합니다 (예 : 'p', 'f'). case 문에서

1


당신은 당신은

switch (type) { 
case 'p': 
....... 
case 'f': 
...... 
} 

하지

switch (type) { 
case p: 
....... 
case f: 
...... 
} 
A (문자 스위치)를 사용할 수 있습니다 만
예를
를 들어 (문자 스위치) 또는 (숫자 스위치)를 사용한다
+0

당신이 빠르게 일하기를 원한다면 더 빠른 비교에서 이익을 얻을 수있는 마법 숫자와 정수를 피하기 위해 상수를 사용해야한다. 자바는 이것을하기위한 enum workaround 이외의 적당한 방법을 제공하지 못한다. –