Ошибка синтаксиса оператора Swtich - PullRequest
0 голосов
/ 23 января 2012

Я пытаюсь проверить, отправляет ли мой пользователь разумные данные, которые впоследствии форматируются в целое число.Где проблема с оператором switch?:)

void convert(String str)
{
    int i=0;
    String x=str.startsWith();
    switch (x) {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
        case 0:
            int i = Integer.parseInt(str);
            break;
        default:
            System.out.println ("Should start with fixnumber");
    }
    System.out.println (i);
}

Ответы [ 4 ]

2 голосов
/ 23 января 2012

Вы включаете x , который является строкой - если вы не используете Java 7, вы не можете использовать строку в выражении Switch.

Я ожидаю, что ошибкана самом деле происходит из str.startsWith () , где этот метод ожидает получить строку (с которой вы проверяете, с чего он начинается) и возвращает логическое значение, которое вы не можете включить либо.

ОБНОВЛЕНИЕ Исправление вашего кода, чтобы сделать то, что, я думаю, вы пытаетесь сделать:

void convert(String str)
{
    int i = 0;
    switch (str.charAt(0)) {
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
        case '0':
            i = Integer.parseInt(str);
            break;
        default:
            System.out.println ("Should start with fixnumber");
    }
    System.out.println (i);
}

Хотя более короткий путь это просто сделать Integer.вызов parseInt и обработка возможного исключения NumberFormatException - тогда вам вообще не нужно выполнять переключение.

void convert(String str)
{
    try {
        int i = Integer.parseInt(str);
        System.out.println (i);
    } catch (NumberFormatException e) {
        System.out.println ("Should start with fixnumber");
    }
}

Вам необходимо либо вернуть i; и преобразовать сигнатуру метода из void в int , либо иным образом предоставить данные в я , чтобы сделать его стоящим.

1 голос
/ 23 января 2012

Если вы пытаетесь проверить, является ли введенная строка целым числом, то я не вижу смысла ставить switch() на первое место.Было бы гораздо лучше отловить исключение, возникающее при попытке работать с функцией.

Пример:

void convert(String str) { // Heads-up:  convert has <package> visibility
    int i = 0;
    try {
        i = Integer.parseInt(str);
        System.out.println(i);
    } catch (NumberFormatException nfe) {
        System.out.println ("Should start with fixnumber");
    }
}
1 голос
/ 23 января 2012

x - это строка, и если вы проверяете число.попробуй:

case "string1"
..
break;
case "string2"
..
break;
etc...
0 голосов
/ 23 января 2012

Ваш x является строкой.Оператор switch пытается сравнить его с целочисленными значениями.Вам нужно что-то вроде этого:

switch (Integer.parseInt(x))
{
   // etc...

РЕДАКТИРОВАТЬ: На самом деле, теперь, когда я вижу, что строка должна быть результатом вызова StartWith, я полностью запутался в том, что этот код пытается сделать.

...