2016-08-27 2 views
-3

Я пытаюсь получить пользовательский ввод в свой пол и преобразовать его в символ и в верхний регистр.charAt (0) Индекс строки за пределами диапазона: 0

Тем не менее, я продолжаю получать эту ошибку: Исключение из потока «main» java.lang.StringIndexOutOfBoundsException: Индекс строки за пределами диапазона: 0 на java.lang.String.charAt (Неизвестный источник) в InfoDisplay.main (InfoDisplay. Java: 12)

import java.util.Scanner; 
    public class InfoDisplay { 
    public static void main(String args[]) { 
     Scanner sc = new Scanner(System.in); 

     String gender; 
     char genderChar; 

     System.out.print("Enter gender (Male/Female): "); 
     gender = sc.nextLine(); 
     gender = gender.toUpperCase(); 
     genderChar = gender.charAt(0); 


     System.out.println("Your gender is " + genderChar); 
    } 
} 
+2

Это происходит, если строка пуста. Не знаю, как вам удается читать пустую строку с клавиатуры. –

+0

попробуйте проверить gender.isEmpty() – hacker13ua

+0

Итак, как я могу преобразовать вход пользователя в символ верхнего регистра? – cosmo

ответ

0

Попробуйте это ..

import java.util.Scanner; 
    public class InfoDisplay { 
    public static void main(String args[]) { 
     Scanner sc = new Scanner(System.in); 

     String gender; 
     char genderChar; 

     System.out.print("Enter gender (Male/Female): "); 
     gender = sc.next(); //It will not take Enter as an input 
     gender = gender.toUpperCase(); 
     genderChar = gender.charAt(0); 


     System.out.println("Your gender is " + genderChar); 
    } 
} 

Если вы используете sc.nextLine() принять строку в качестве входных данных, он будет рассматривать Enter в качестве входных данных из строки, когда вы нажимаете его после ввода ввода поэтому вы можете использовать другую альтернативу sc.nextLine(). Вы можете использовать sc.next() Если ваша строка ввода не содержит места, поэтому она будет работать здесь.

1

Это исключение возникает, когда вы не вводите какой-либо символ в консоль (ваша строка пуста). Я рекомендую написать код с блоком try/catch.

import java.util.Scanner; 

public class InfoDisplay { 
    public static void main(String args[]) { 
     Scanner sc = new Scanner(System.in); 

     String gender; 
     char genderChar; 

     System.out.print("Enter gender (Male/Female): "); 

     try { 
      gender = sc.nextLine(); 
      gender = gender.toUpperCase(); 
      genderChar = gender.charAt(0); 
      System.out.println("Your gender is " + genderChar); 
     } catch(Exception e) { 
      System.out.println("No gender has been entered. Please, try again"); 
     } 
    } 
} 

Возможные выходы:

  • Вы не ввести любой символ:

    Enter gender (Male/Female):
    No gender has been entered. Please, try again

  • Вы введите 'F' символ:

    Enter gender (Male/Female): f
    Your gender is F

  • Вы вводите любую гр хар:

    Enter gender (Male/Female): x
    Your gender is X

Может быть, вы хотели бы, чтобы создать рисунок или что-то подобное, чтобы только «F» и «M», чтобы быть правильные символов.