2016-10-04 2 views
0

Все переменные правильно инициализированы и определены только внутри этого метода, вызывают день как целое число, а затем задают строку, которая может быть прочитана, а затем разделена на символы для создания слова формат. Кроме того, математика с dayL, целое число, иногда возвращает исключение StringIndexOutOfBounds, которое я понимаю из-за ошибки из-за неравенства, которое я создаю с помощью .length(); Благодарим вас за помощь.Строка внутри корпуса коммутатора возвращает нуль

public static void bday() 
{ 
    s_day = Integer.toString(day); 
    dayL = s_day.length(); 

    switch (dayL) 
    { 
    case 1: 
     if(s_day.charAt(0) == 1) 
     { 
      word_day = "first"; 
     } 
     else if(s_day.charAt(0) == 2) 
     { 
      word_day = "second"; 
     } 
     else if(s_day.charAt(0) == 3) 
     { 
      word_day = "third"; 
     } 
     else if(s_day.charAt(0) == 4) 
     { 
      word_day = "fourth"; 
     } 
     else if(s_day.charAt(0) == 5) 
     { 
      word_day = "fifth"; 
     } 
     else if(s_day.charAt(0) == 6) 
     { 
      word_day = "sixth"; 
     } 
     else if(s_day.charAt(0) == 7) 
     { 
      word_day = "seventh"; 
     } 
     else if(s_day.charAt(0) == 8) 
     { 
      word_day = "eighth"; 
     } 
     else if(s_day.charAt(0) == 9) 
     { 
      word_day = "ninth"; 
     } 
     break; 

    case 2: 
     //teens 

     if(s_day.charAt(0) == 1 && s_day.charAt(1) == 0) 
     { 
      word_day = "tenth"; 
     } 
     else if(s_day.charAt(0) == 1 && s_day.charAt(1) == 1) 
     { 
      word_day = "eleventh"; 
     } 
     else if(s_day.charAt(0) == 1 && s_day.charAt(1) == 2) 
     { 
      word_day = "twelfth"; 
     } 
     else if(s_day.charAt(0) == 1 && s_day.charAt(1) == 3) 
     { 
      word_day = "thirteenth"; 
     } 
     else if(s_day.charAt(0) == 1 && s_day.charAt(1) == 4) 
     { 
      word_day = "fourteenth"; 
     } 
     else if(s_day.charAt(0) == 1 && s_day.charAt(1) == 5) 
     { 
      word_day = "fifteenth"; 
     } 
     else if(s_day.charAt(0) == 1 && s_day.charAt(1) == 6) 
     { 
      word_day = "sixteenth"; 
     } 
     else if(s_day.charAt(0) == 1 && s_day.charAt(1) == 7) 
     { 
      word_day = "seventeenth"; 
     } 
     else if(s_day.charAt(0) == 1 && s_day.charAt(1) == 8) 
     { 
      word_day = "eighteenth"; 
     } 
     else if(s_day.charAt(0) == 1 && s_day.charAt(1) == 9) 
     { 
      word_day = "ninteenth"; 
     } 

     //twenties 

     if(s_day.charAt(0) == 2 && s_day.charAt(1) == 0) 
     { 
      word_day = "twentieth"; 
     } 
     else if(s_day.charAt(0) == 2 && s_day.charAt(1) == 1) 
     { 
      word_day = "twenty-first"; 
     } 
     else if(s_day.charAt(0) == 2 && s_day.charAt(1) == 2) 
     { 
      word_day = "twenty-second"; 
     } 
     else if(s_day.charAt(0) == 2 && s_day.charAt(1) == 3) 
     { 
      word_day = "twenty-third"; 
     } 
     else if(s_day.charAt(0) == 2 && s_day.charAt(1) == 4) 
     { 
      word_day = "twenty-fourth"; 
     } 
     else if(s_day.charAt(0) == 2 && s_day.charAt(1) == 5) 
     { 
      word_day = "twenty-fifth"; 
     } 
     else if(s_day.charAt(0) == 2 && s_day.charAt(1) == 6) 
     { 
      word_day = "twenty-sixth"; 
     } 
     else if(s_day.charAt(0) == 2 && s_day.charAt(1) == 7) 
     { 
      word_day = "twenty-seventh"; 
     } 
     else if(s_day.charAt(0) == 2 && s_day.charAt(1) == 8) 
     { 
      word_day = "twenty-eighth"; 
     } 
     else if(s_day.charAt(0) == 2 && s_day.charAt(1) == 9) 
     { 
      word_day = "twenty-ninth"; 
     } 

     //thirties 

     if(s_day.charAt(0) == 3 && s_day.charAt(1) == 0) 
     { 
      word_day = "thirtieth"; 
     } 
     else if(s_day.charAt(0) == 3 && s_day.charAt(1) == 1) 
     { 
      word_day = "thirty-first"; 
     } 
     break; 
    } 
    System.out.println("Your birthday is: " + s_month + " "+ word_day); 
} 
+0

'1! = '1'' и' 2! =' 2'' и т. Д. Почему бы не 'switch (day)'? В чем смысл остальной части вашего кода? –

+0

Это было для проекта генератора гороскопа, я над сложным и решил пройти длинный путь, используя строки, используя преобразование строки string, вместо строковой строки, или так, думаю, спасибо за предложение btw – Kaden

ответ

3

Каждый раз, когда вы сравниваете персонажа, вы делаете это неправильно.

s_day.charAt(0) == 1 

должен быть

s_day.charAt(0) == '1' 

Но даже это гораздо сложнее, чем это должно быть. У вас есть день как int в переменной day, правильно? Так почему бы не просто сделать if заявление, основываясь на том, что:

if (day == 1) { 
    word_day = "first"; 
}else if (day == 2) 
//and so on 
+0

Я не могу поверить Я упустил цитаты, спасибо за предложение. – Kaden

+0

@ Kaden рады помочь. пожалуйста, поддержите и примите – nhouser9

1

Вы должны использовать

s_day.charAt(0)=='1'

И я рекомендую, что вы можете написать Thie метод, как это:

String [] days={"first","second","third",.......,"thirty-first"}; 
word_day=days[day%31]; 
0

Пожалуйста, реорганизуйте этот код, например, @fei_hsueh, или как показано ниже:

Map<Integer, String> days = new HashMap<>(); 
days.put(1, "first"); 
days.put(2, "second"); 
days.put(3, "third"); 
... 

private static String bday(int day) { 
    return days.get(day); 
} 
Смежные вопросы