2016-03-23 4 views
1

Я пытаюсь использовать оператор switch, чтобы рассчитать, сколько пациент обязан своей страховкой, но по какой-то причине он всегда взимает с них цену по умолчанию 45 $. Если они не используют ни один из трех вариантов, их цена составляет 45 $, но даже если я скажу, что использую US Insurance или Mountain Health, она говорит, что цена составляет 45 $. Любая идея, почему она не работает?Оператор переключения Java, идущий прямо по умолчанию

Кроме того, существует ли способ игнорировать, использует ли пользователь заглавные буквы или нет, чтобы получить тот же результат, если они набрали «СТРАХОВАНИЕ США», «НАШЕ страхование» или «Страхование США»?

int charge; 
    Scanner kb = new Scanner(System.in); 


    System.out.print("What is the name of your insurance? "); 
    Insurance = kb.nextLine(); 

    switch (Insurance) { 

     case "Mountain Health": 
      charge= 30; 
      break; 

     case "US Insurance": 
      charge= 40; 
      break; 

     case "Blue Insurance": 
      charge= 45; 
      break; 

     default: 
      price = 45; 
    } 
    System.out.println("Your charge is " + charge + "$."); 
+0

Что тип страхования, не могли бы вы показать, где вы объявляете его – jstuartmilne

+0

@Sudakatux Это 'String', в противном случае ОП получает компиляцию ошибка. – Maroun

+0

Да, заметив сразу после попадания. : P – jstuartmilne

ответ

6

Матч полный случай с сравниваемой строки

switch (insurance.toUppercase()) { 
... 

case "MOUNTAIN HEALTH": 
.... 
+0

или в нижнем регистре ... – Aaron

+0

@ Аарон или прописные буквы;) – Maroun

+0

Нет необходимости в локали? – bphilipnyc

0

Я хотел бы также предложить поставить варианты в классе (я считаю, что это лучшие практики):

public class InsuranceTypes { 

    public static String MOUNTAIN_HEALTH = "MOUNTAIN HEALTH"; 
    public static String US_INSURANCE = "US INSURANCE" 
    ... 
} 

И в использовании:

switch (insurance.toUppercase()) { 
... 

case InsuranceTypes.MOUNTAIN_HEALTH: 
... 

Это помогает предотвратить опечатку в заявлениях о делах.

+1

почему бы не перечислить? – mauretto

+0

Возможно, но поскольку вы получаете ввод как String, вам нужно будет каким-либо образом преобразовать enum, чтобы иметь возможность использовать его в коммутаторе и связать его с входной строкой (перечисление не может содержать пробелы, вход может ... и т. д.) – Nom1fan

+1

просто ovverride toString() ... но не так быстро, как вы указываете. – mauretto

1

Если ни один из вариантов в корпусе коммутатора не выполнен, ваш код перейдет к случаю по умолчанию. Переменный заряд больше не используется, и вы вместо этого печатаете заряд.

Вы должны удалить пустые пространства и сделать сравнение, чтобы понизить/прописные буквы:

switch (insurance.toLowerCase().trim()) { 
     case "mountain health": 
      charge = 30; 
      break; 
    .... 
Смежные вопросы