2015-11-16 5 views
-3

Привет Я только начал изучать Java, я пытаюсь перевести градусы Цельсия в градусы Фаренгейта и наоборот, но мой код ниже выдает следующее исключение:Java Цельсия в Фаренгейта алгоритм Броски StringIndexOutOfBoundsException

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: 
String index out of range: 0 
    at java.lang.String.charAt(Unknown Source) 
    at hello.main(hello.java:33) 

Это моя программа:

public class hello { 

    public static void main(String[] args) { 
     System.out.println("CONVERTISSEUR DEGRES CELSIUS ET DEGRES FAHRENHEIT"); 
     System.out.println("-------------------------------------------------"); 
     Scanner sc = new Scanner(System.in); 
     byte a = sc.nextByte(); 
     char test = 'O'; 
     while(test == 'O') { 
      switch(a) { 
       case 1: { 
        System.out.println("Température a convertir :"); 
        float temp=sc.nextFloat(); 
        float nvtemp=temp * 9/5 + 32; 
        System.out.println(temp + " °C correspond a : " + nvtemp + " °F"); 
        }break; 
       case 2: { 
        System.out.println("Température a convertir :"); 
        float temp = sc.nextFloat(); 
        float nvtemp = (temp - 32) * 5/9; 
        System.out.println(temp + " °F correspond a : " + nvtemp + " °C"); 
        }break; 
       default: 
        System.out.println("Stp entrer 1 ou 2 !!"); 
      } 

      test = ' '; 
      while(test != 'O' && test != 'N') { 
       System.out.println("Souhaitez-vous convertir une autre température ?(O/N)"); 
       test = sc.nextLine().charAt(0); 
      } 
     } 
     System.out.println("Goodbye !!");  
    } 
} 

Может кто-нибудь помочь мне понять, почему мой код бросает StringIndexOutOfBoundsException?

+1

Первый вызов 'sc.nextLine()' возвращает пустую строку (для 'случае 1' и' случае 2') и вызова '.charAt (0) 'на пустую строку вызывает это исключение. Проверьте упомянутый дублированный вопрос, чтобы узнать, почему он возвращает пустую строку. – Tom

ответ

0

Во втором цикле вы звоните test = sc.nextLine().charAt(0);. sc.nextLine() используется для чтения любых оставшихся символов, оставшихся в результате предыдущих вызовов метода nextXXX(). Поэтому вместо использования test = sc.nextLine().charAt(0); используйте test = sc.next().charAt(0); во втором цикле while.

т.е. ниже код работает

public class hello { 

public static void main(String[] args) { 
    System.out.println("CONVERTISSEUR DEGRES CELSIUS ET DEGRES FAHRENHEIT"); 
    System.out.println("-------------------------------------------------"); 
    System.out 
      .println("Choisir le mode de conversion :\n1 - Convertisseur Celsius - Fahrenheit\n2 - Convertisseur Fahrenheit - Celsius"); 
    Scanner sc = new Scanner(System.in); 
    byte a = sc.nextByte(); 
    char test = 'O'; 
    while (test == 'O') { 
     switch (a) { 
     case 1: { 
      System.out.println("Température a convertir :"); 
      float temp = sc.nextFloat(); 
      float nvtemp = temp * 9/5 + 32; 
      System.out.println(temp + " °C correspond a : " + nvtemp 
        + " °F"); 
     } 
      break; 
     case 2: { 
      System.out.println("Température a convertir :"); 
      float temp = sc.nextFloat(); 
      float nvtemp = (temp - 32) * 5/9; 
      System.out.println(temp + " °F correspond a : " + nvtemp 
        + " °C"); 
     } 
      break; 
     default: 
      System.out.println("Stp entrer 1 ou 2 !!"); 
     } 
     test = ' '; 
     while (test != 'O' && test != 'N') { 
      System.out 
        .println("Souhaitez-vous convertir une autre température ?(O/N)"); 
      test = sc.next().charAt(0); 
     } 
    } 
    System.out.println("Goodbye !!"); 

} 
} 
Смежные вопросы