Использование подстрок для получения целых чисел и символа из строки в Java? - PullRequest
3 голосов
/ 11 октября 2019

Пользователю предлагается ввести температуру, затем пользователь вводит число, за которым следуют либо C, либо F по Цельсию или по Фаренгейту. Затем программа должна распознать температуру и в какой единице измеряется температура - используя эти данные, она сообщает, является ли «вода» твердой, жидкой или газообразной.

Я пробовалниже

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

    System.out.print("Enter THE temp: ");
    String ent = myScan.next();


    int temp = Integer.parseInt(ent.substring(0,4));

    //char type = ent.charAt();
    //System.out.println(temp);
    // System.out.println(type);

    if (temp >= 100) {
        System.out.println("The water is gaseous");
    } else if (temp < 0) {
        System.out.println("The water is solid");
    } else {
        System.out.println("the water is liquid");
    }

}

Когда я поместил (0,4) во временную подстроку, я бы подумал, что выводом будут первые 3 введенных числа. Вместо этого я получаю сообщение об ошибке «java.lang.StringIndexOutOfBoundsException» при вводе 1 int или 3.

Ответы [ 4 ]

5 голосов
/ 11 октября 2019

Похоже, что он ищет символ, который находится за пределами строки. Вместо жесткого кодирования длины строки до 4 используйте ent.length ().

int temp = Integer.parseInt(ent.substring(0,ent.length()-1));

Вам также может понадобиться формула для преобразования в градусы Цельсия, если последний символ - F

substring(ent.length()-1).equalsIgnoreCase("F");
0 голосов
/ 11 октября 2019

s.substring(begin, end) вернет строку с символами от begin до end - 1.

Если вы хотите извлечь все символы, кроме последнего, вы можете использовать

s.substring(0, s.length() - 1)

и только для последнего символа вы можете использовать

s.substring(s.length() - 1, s.length()).

Вы получаете java.lang.StringIndexOutOfBoundsException, поскольку длина введенной строки меньше end (1<4 и 3 <4 в вашем случае). </p>

0 голосов
/ 11 октября 2019

Сначала попросите Цельсия или Фаренгейта, а затем попросите юниты для пользователя. http://prntscr.com/phx15j

с просьбой ввести такую ​​температуру -> 50 ° C неправильно.

0 голосов
/ 11 октября 2019

Если вы рассматриваете функцию подстроки, она принимает все символы от beginIndex до endIndex - 1, поэтому здесь, если вы введете «123something», результатом будет «123s», так как символ индекса 3 равен «s».

С другой стороны, если вы введете только «12c», подстрока выдаст ошибку, поскольку в индексе нет символа char.

Лично я бы выбрал регулярное выражениездесь, поскольку температура может быть в 1, 2 или 5 символов, в зависимости от того, как вы пишете.

...