2014-10-10 4 views
0

다음은 과제 코드입니다. 부울 플래그가 제대로 작동하지 않는 것 같습니다. 내가 알아 내려고 할 때, 모든 이름이 할인을 받거나 이름이 할인을 얻지 못합니다. Mike 또는 Diana의 이름을 명확히하기 위해서는 할인을해야합니다.내가 무엇을 잘못하고 있는지 확실하지 않습니다 (부울 플래그)

String firstName;  //user's first name 
boolean discount = false; //flag, true if user is eligible for discount 
int inches;  //size of the pizza 
char crustType;  //code for type of crust 
String crust; //name of crust 
double cost = 12.99; //cost of the pizza 
final double TAX_RATE = .08; //sales tax rate 
double tax;  //amount of tax 
char choice;  //user's choice 
String input;  //user input 
String toppings = "Cheese "; //list of toppings 
int numberOfToppings = 0; //number of toppings 

//prompt user and get first name 
System.out.println("Welcome to Mike and Diane's Pizza"); 
System.out.print("Enter your first name: "); 
firstName = keyboard.nextLine(); 

if (firstName == "mike" || firstName == "diana" || firstName == "Mike" || firstName == "Diana" || 
firstName == "MIKE" || firstName == "DIANA") 
{ 
discount = true; 
} 

if (discount = true) 
{ 
cost -= 2.0; 
System.out.println ("You are eligible for a $2 discount."); 
+0

무엇이 잘못 되었나요? – PeterK

+0

문자열 comparisons 이외에,'if (discount = true)'를'if (discount == true)'로 대체해야합니다. 첫 번째는 변수'discount'에 값을 할당하고, 두 번째는 comparaison입니다. – AntonH

+0

@SotiriosDelimanolis 문자열 비교가 유일한 문제는 아닙니다. –

답변

3

우선 문자열 비교를 위해 ==을 사용하지 마십시오. String#equals() 방법을 per this SO question으로 사용해야합니다.

if (firstName == "mike" || firstName == "diana" || firstName == "Mike" || firstName == "Diana" || firstName == "MIKE" || firstName == "DIANA") 

Gavin 원래의 질문에 대한 코멘트에 말한대로, 덜 comparaisons 수 있도록하려면 다음 중 하나를 대문자 또는 소문자 전체 문자열을 변환 할 더 나은 것,

그러나
if (firstName.equals("mike") || firstName.equals("diana") || firstName.equals("Mike") || firstName.equals("Diana") || firstName.equals("MIKE") || firstName.equals("DIANA")) 

로 대체 될 것이다. 또는 Pshemo 님의 댓글에 따라 equalsIgnoreCase()을 사용하세요.

당신도 변경해야합니다, Pshemo의 의견에 따라,

if (discount = true) 
변수 discounttrue의 값을 할당한다

,

if (discount == true) 

또는

if (discount) 
+4

'if (discount == true)'를 피하고 대신'if (discount)'를 사용하는 것이 좋습니다. 이렇게하면 우리는 하나의 양식 OP 코드와 같은 실수를 저 지르지 않을 것이라고 확신합니다. – Pshemo

+3

또한 'equalsIgnoreCase'는 수동으로 문자열을 대문자로 변환하는 것보다 더 좋은 옵션처럼 보입니다. – Pshemo

+0

@Pshemo 두 유효한 포인트. 나는 내 대답을 편집하고 편집 한 내용을 당신에게 보냈습니다. – AntonH

0

내 식으로 코드를 검사했습니다. .

if(firstName == "mike" || firstName == "diana" || firstName == "Mike" || firstName == "Diana" ||firstName == "MIKE" || firstName == "DIANA") 

같은 문자열을 비교할 때 문제가 있기 때문에 사용하는 것이 좋습니다. 값을

if (firstName.equals("mike")){ 
    discount = true; 
} 

으로 변경해야합니다. 그런 다음 할인은 부울 변수입니다. 그래서 당신은 그것이 사실인지 아닌지 비교할 필요가 없습니다.

if (discount) //if will check whether it's true or not if provided with a condition,discount is boolean, so need of comparison 

은 부울 연산자로 매우 간단합니다.

관련 문제