Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 16
1

Java игнорирует IF внутри SWITCH

13.05.2013, 12:25. Показов 2427. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
Пишу программу, внутри SWITCH'а вставил IF, который до вставки в SWITCH работал идеально.
Знаний не хватает, в книгах не нашел, но ДЖАВА игнорирует возможные варианты, не проверяя два IF'а, просто выполняя заключительный ELSE. Если закомментировать все, кроме IF'ов, опять начинает работать нормально.
Методом тыкания определил, что ДЖАВА не выполняет String salType = new String (reader.readLine());


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package com.first;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import com.second.*;
 
public class Main {
 
    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        char choice;
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        do
        {
        System.out.println("Г Л А В Н О Е    М Е Н Ю    П Р О Г Р А М М Ы");
        System.out.println("1 - Создать новый объект");
        System.out.println("2 - Вывести ВСЕ объекты на экран");
        System.out.println("3 - E X I T");
        System.out.println("----------------------------------------------");
        choice = (char) System.in.read();
        }
        while (choice < '1' || choice > '3');
 
        switch (choice)
        {
        case '1':            
            System.out.println("choice = " + choice);
            System.out.println("Введите тип объекта: первый (f) или второй (s)");
            String salType = new String (reader.readLine());
            
            if (salType.equals("f"))
            {
                System.out.println("It doesn't work !!!");
                //используем конструктор 1
            }
                else if salType.equals("s"))
                {
                    System.out.println("It doesn't work !!!");
                    //используем конструктор 2
                }
                    else
                    {
                        System.out.println("It is showed !");
                    }
                break;
        }
                
        case '2':            
            break;
        case '3':       
            //exit();
            break;
        }   
    }   
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2013, 12:25
Ответы с готовыми решениями:

Рефакторинг switch внутри switch в static классе
Добрый день. Подскажите, как корректно обойти конструкцию switch case внутри switch case в...

gets внутри switch
Подскажите, почему не получается осуществить gets для ввода char внутри данной конструкции: do ...

Объявление внутри switch
Почему, когда закомментирваны фигурные скобки не получается объявить переменную внутри switch? ...

Выход из функции внутри switch
Здавствуйте Решала задачу, подсчет очков команды из всех сыгранных матчей (первая цифра в строке...

16
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
13.05.2013, 12:32 2
А вы уверены что она не проверяет if?
Попробуйте, например, вывести длину salType, перед проверками. Возможно, это поможет вам в поисках причины.
Java
35
        System.out.println("salType length = " + salType.length());
0
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 16
13.05.2013, 12:44  [ТС] 3
Наверно, проверяет, но salType ничего не содержит.
Если сделать так:
Java
1
2
String salType = new String (reader.readLine());
System.out.println("salType = " + salType);
то println ДО вставки выводит salType на экран, а ПОСЛЕ вставки - полнейший игнор.

Добавлено через 6 минут
На экране будет:
salType =
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
13.05.2013, 12:49 4
Я не понял про какую вставку вы говорите.
Я же просил вывести длину поля salType, а не само его значение...
0
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 16
13.05.2013, 13:16  [ТС] 5
К сожалению, пишу с работы, тут IDE нет возможности поставить.
Вставка - это размещение ИФа внутрь СВИТЧА. До этой операции salType инициализировался. После - перестал.
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
13.05.2013, 13:41 6
лучше Scanner используйте
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
 
//import com.second.*;
 
public class Clazz {
 
    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        char choice;
        Scanner sc = new Scanner(System.in);
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        do {
            System.out.println("Г Л А В Н О Е    М Е Н Ю    П Р О Г Р А М М Ы");
            System.out.println("1 - Создать новый объект");
            System.out.println("2 - Вывести ВСЕ объекты на экран");
            System.out.println("3 - E X I T");
            System.out.println("----------------------------------------------");
            choice = (char) System.in.read();
        } while (choice < '1' || choice > '3');
 
        switch (choice) {
        case '1':
            System.out.println("choice = " + choice);
            System.out.println("Введите тип объекта: первый (f) или второй (s)");
            
            //String salType = new String(reader.readLine());
            String salType = new String(sc.next());
            if (salType.equals("f")) {
                System.out.println("It doesn't work !!!f");
                // используем конструктор 1
            } else if (salType.equals("s")) {
                System.out.println("It doesn't work !!!s");
                // используем конструктор 2
            } else {
                System.out.println("It is showed !");
            }
            break;
        // }
 
        case '2':
            break;
        case '3':
            // exit();
            break;
        }
    }
}
0
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
13.05.2013, 13:45 7
Закрывающая скобка лишняя. Но это наверное не важно

Добавлено через 22 секунды
tankomaz поправил в своем коде
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
13.05.2013, 13:47 8
там пол кода лишних и не достающих скобок было как работало - не знаю

Добавлено через 1 минуту
Цитата Сообщение от chizz Посмотреть сообщение
Закрывающая скобка лишняя. Но это наверное не важно

Добавлено через 22 секунды
tankomaz поправил в своем коде
будьте добры показать какая именно лишняя?
1
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
13.05.2013, 13:48 9
Цитата Сообщение от tankomaz Посмотреть сообщение
будьте добры показать какая именно лишняя?
В исходном коде ТС. В вашем нет лишних
0
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 16
13.05.2013, 15:27  [ТС] 10
tankomaz, спасибо, попробую сканнер, как дома окажусь.

Про скобки лишние - извините, правил в блокноте кусок кода, на этого кода скобки которого ECLIPSE не ругался. Стирал ненужные Вам операторы, скобка и осталась.

Просто я не понимаю - должно работать, и снаружи от СВИТЧА работает, salType инициализируется, а внутри СВИТЧА - перестает.
0
37 / 41 / 3
Регистрация: 10.10.2010
Сообщений: 364
13.05.2013, 15:34 11
после case: должен быть блок
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
13.05.2013, 15:38 12
Цитата Сообщение от tabber Посмотреть сообщение
после case: должен быть блок
без компилятора, какой будет вывод?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class StaticTest {
 
    public static void main(String[] args) {
        int i = 1;
        
        switch (i) {
        case 1: System.out.println("1");
        case 2: System.out.println("2");
        case 3: System.out.println("3");
            break;
        case 4: System.out.println("4");
        }
        
 
    }
}
и какой вывод из этого следует?
0
37 / 41 / 3
Регистрация: 10.10.2010
Сообщений: 364
13.05.2013, 15:39 13
ну так это когда один оператор. Как минимум из за симантики вы обязаны поставить блок
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
13.05.2013, 15:41 14
Цитата Сообщение от tabber Посмотреть сообщение
ну так это когда один оператор. Как минимум из за симантики вы обязаны поставить блок
какой симантики? по code convention всё в порядке (пункт 7.8)
http://www.oracle.com/technetw... 1.html#468
0
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 16
13.05.2013, 15:53  [ТС] 15
ВЫвод:
1
2
3

Добавлено через 57 секунд
Свитч интересен тем, что {} не нужно.
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
13.05.2013, 15:53 16
Цитата Сообщение от Novac Посмотреть сообщение
ВЫвод:
1
2
3

Добавлено через 57 секунд
Свитч интересен тем, что {} не нужно.
правильно ловите плюсик
.... виртуальный, кнопка пропала
0
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 16
14.05.2013, 11:02  [ТС] 17

а почему мой salType не хочет инициализироваться?!!!

Добавлено через 19 часов 6 минут
Спасибо, Scanner помог.
0
14.05.2013, 11:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2013, 11:02
Помогаю со студенческими работами здесь

Пропуск условия if внутри switch
В общем я как-то подвис, и не могу взять в толк в чем проблема.В свитче по сути if должен же...

Объявление переменных внутри блока switch
#include &lt;iostream&gt; int main() { int choice = 2; switch(choice) { ...

Ошибки при создании объекта внутри switch case
Всем добрый день! Имеем кусочек текста SprListAdd formadd = new SprListAdd(); ...

Как создать условие if внутри switch? (обработчик клавиш)
Здравствуйте! Подскажите пожалуйста, как создать условие if внутри switch? Есть обработчик клавиш:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru