Есть ли команда char.length? - PullRequest
1 голос
/ 31 марта 2020

// Я застрял, пытаясь заставить мою программу принимать только один символ из сканера. Прямо сейчас программа будет принимать любое количество символов, если первая буква является одной из перечисленных. Я хотел бы переписать этот код без charAt (0), если это возможно, или добавить оператор if. if (sea.length> 1) {} что-то в этом роде. Я надеюсь, что объяснил проблему достаточно хорошо, чтобы понять. Любая помощь приветствуется, и спасибо за ваше время.

    public static char promptForChoice(Scanner in) {

    System.out.println("High, Low or Seven(H/L/S");
    char sel = in.next().charAt(0);
    sel = Character.toUpperCase(sel);
    int i = 1;
    while (i != 0) {
        System.out.println("High, Low or Seven(H/L/S");
        if (sel == 'H' || sel == 'L' || sel == 'S') {
            i = 0;
        } else {
            System.out.println("You must enter only H, L or S.");
            i = 1;
        }
    }
    return sel;


} 

Ответы [ 3 ]

1 голос
/ 31 марта 2020

Есть команда char.length?

Нет, такой команды нет. Вам нужно получить вход с помощью Scanner::nextLine() и проверить длину ввода String.

. Сделайте это следующим образом:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // Test
        Scanner in = new Scanner(System.in);
        System.out.println(promptForChoice(in));
    }

    public static char promptForChoice(Scanner in) {
        char sel = 0;
        String input;
        boolean valid;
        do {
            valid = true;
            System.out.print("Enter H/L/S [High/Low/Seven]: ");
            try {
                input = in.nextLine();
                sel = input.toUpperCase().charAt(0);
                if (input.length() == 1 && (sel == 'H' || sel == 'L' || sel == 'S')) {
                    return sel;
                } else {
                    throw new IllegalArgumentException("You must enter only H, L or S.");
                }
            } catch (IllegalArgumentException e) {
                valid = false;
                System.out.println(e.getMessage());
            }
        } while (!valid);
        return sel;
    }
}

Пример прогона:

Enter H/L/S [High/Low/Seven]: hello
You must enter only H, L or S.
Enter H/L/S [High/Low/Seven]: High
You must enter only H, L or S.
Enter H/L/S [High/Low/Seven]: M
You must enter only H, L or S.
Enter H/L/S [High/Low/Seven]: H
H

Не стесняйтесь комментировать в случае каких-либо сомнений / проблем.

0 голосов
/ 31 марта 2020

Вы можете получить вход от сканера и поместить его в строку, тогда вы можете сделать string.length и проверить его!

0 голосов
/ 31 марта 2020

Длина символа всегда равна 1, я полагаю, вы могли бы достичь того, что вам нужно, с помощью

public static char promptForChoice(Scanner in) {

if(in.next() == "H" || in.next() == "L" || in.next() == "S") {
 System.out.println("High, Low or Seven(H/L/S");
 return (char) in.next();
}
else {
 System.out.println("You must enter only H, L or S.");
 // you must always have a return value, in this case 
 //e.g. the automatically initialized char value
 return '\0';
}
}

с помощью своего кода вы могли бы сделать что-то вроде

public static char promptForChoice(Scanner in) {

System.out.println("High, Low or Seven(H/L/S");
char sel = in.next().charAt(0);
if(in.next().length == 1) {
  sel = Character.toUpperCase(sel);
  int i = 1;
 while (i != 0) {
    System.out.println("High, Low or Seven(H/L/S");
       if (sel == 'H' || sel == 'L' || sel == 'S') {
        i = 0;
       } else {
         System.out.println("You must enter only H, L or S.");
         i = 1;
       }
    }
   }
   else System.out.println("You must enter only one single character");
    return sel;
    } 
...