2014-01-23 12 views
0

Я пытаюсь написать программу для своего класса программирования, и программа должна работать как онлайн-магазин покупок, и поэтому в какой-то момент программа должна спросить у пользователя, есть ли у них промо-код, и если они добавят «y» для «да», он попросит промо-код из шести символов.Программа не работает должным образом

Критерии рекламного кода:

  • Третий символ должен быть 7
  • пятые и шестые символы должны быть 'Bg.

По какой-то причине моя программа, похоже, работает неправильно. Он компилируется отлично, но когда он достигает оператора if, который проверяет промо-код, он всегда распечатывает строку, в которой сообщается, что ваш рекламный код неверен. Я даже изменил его так, что критерии состояли только в том, что одному из символов в коде должно быть 7, а затем ввести «777777» в качестве промо-кода, но он все еще печатается, как если бы промо-код был неправильным.

Я не могу понять, почему он работает неправильно. Вот исходный код:

Scanner pro=new Scanner(System.in); 
out.println("\nDo you have a promotional code? Enter Y for yes, N for no: "); 
String pc=pro.nextLine(); 
char promo=pc.charAt(0); 

int o=7; 

switch(promo) 
{ 
    case 'y': 
    case 'Y': 
     Scanner mo=new Scanner(System.in); 
     System.out.println("Please input the six character promotional code here: "); 
     String prm=mo.nextLine(); 
     char code=prm.charAt(2); 

     if(code==7&&prm.substring(4).equals("bG")) 
     { 
       ordp=ordp*.9; 
       System.out.println("\nYou have recieved ten percent off your order! Your order subtotal is now "+ordp+"."); 
     } 
     else 
     { 
       System.out.println("\nYour promotional code is not valid."); 
     } 
    case 'n': 
    case 'N': 
     break; 
} 

Я извиняюсь за блок кода не отформатированный правильно. Я не могу понять, как правильно его отформатировать ... извините! Я действительно попытался, и не могу понять, по-видимому, поэтому я сделал все, что мог. В любом случае, это соответствующий код. Помощь очень ценится.

+1

Во-первых: можете ли вы привести несколько примеров входов, которые, по вашему мнению, должны работать, но не так ли? И второе: попробуйте исследовать некоторые из значений. Добавьте некоторые инструкции 'System.out.println' для печати некоторых выражений на этом пути - например, поместите' System.out.println (prm.substring (4)) 'непосредственно перед оператором' if' и посмотрите, согласуется ли это с что вы ожидали. – jazzbassrob

+3

Напишите 'code == '7'' вместо' code == 7'. Неожиданные вещи случаются, когда вы сравниваете значения 'char' с значениями' int'. –

+0

Кстати, не используйте 'double' или' float' для хранения суммы денег. Плохие вещи произойдут, когда вы сделаете арифметику. –

ответ

2

Тип данных кода является символом. Но символьное значение из '7' не 7, а 55.

Так изменить, если так:

if(code=='7'&&prm.substring(4).equals("bG")) 

Несколько замечаний добавить:

  1. Если вы хотите сохранить с помощью переключателя, не забывайте заявления break.
  2. Но вы можете улучшить его, используя простые, если и Character.toLowerCase
  3. Зачем нужен новый сканер mo?Используйте только объект pro Сканер

char promo= Character.toLowerCase(pc.charAt(0)); 
    if(promo == 'y'){ 
     /** 
     * For yes 
     */ 
    } else { 
     /* 
     * For no or different input 
     */ 
    } 
2

При сравнении char значения, это сбивает с толку сравнивать char к int значения, как вы сделали здесь:

if(code==7&&prm.substring(4).equals("bG")) // specifically, code==7 

Вам нужно найти символ '7', а не ASCII character whose int value is 7, "bel". Попробуйте

if(code == '7' && prm.substring(4).equals("bG")) 

Вы хотите добавить дополнительное ограничение, которое prm.length() == 6, для обеспечения, что промо-код должен быть 6 символов.

0
char code=prm.charAt(2); 

if(code==7&&prm.substring(4).equals("bG")) 
{ 
    ordp=ordp*.9; 
    System.out.println("\nYou have recieved ten percent off your order! Your order subtotal is now "+ordp+"."); 
} 
else 
{ 
    System.out.println("\nYour promotional code is not valid."); 
} 

Здесь вы сравниваете полукокса к ИНТ, вы хотите, чтобы сравнить его с «7». Итак, вы можете использовать это вместо этого.

if(code=='7'&&prm.substring(4).equals("bG")) 
Смежные вопросы