Anda Cristea Ответов: 2

Char in a switch-java 7


У меня есть следующий код:

Где я ошибаюсь?

Я в замешательстве, потому что я-чар.

Что я уже пробовал:

public class SwitchChar {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        char i;
        LOOP:
        for (i = 0; i < 5; i++) {
            System.out.println((int)i);
            switch (i++) {
                case '0':
                    System.out.println((int)i);
                    System.out.println("A");
                case 1:
                    System.out.println((int)i);
                    System.out.println("B");
                    break LOOP;
                case 2:
                    System.out.println((int)i);
                    System.out.println("C");
                    break;
                case 3:
                    System.out.println((int)i);
                    System.out.println("D");
                    break;
                case 4:
                    System.out.println((int)i);
                    System.out.println("E");
                case 'E':
                    System.out.println((int)i);
                    System.out.println("F");
            }
        }
    }

}


Я не понимаю шагов, которые ведут к результату.

когда i = 0 - Нет случая для выбора, i увеличивается до 1
когда i = 1-разрыв цикла so for никогда не выполняется



Большое спасибо!!!

2 Ответов

Рейтинг:
9

Patrice T

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
0

Afzaal Ahmad Zeeshan

Вы же понимаете общий факт, что ноль - это не одно и то же в целочисленной форме, а символьная форма. Их двоичный файл, который генерируется и проверяется, не является одним и тем же. Символ-это переключаемое значение, но он не будет отображать какое-либо истинное значение для тех случаев, для которых вы его используете.

Чтобы решить эту проблему, измените один из типов на другой,

for (i = 0; i < 5; i++) {
    System.out.println((int)i);
        switch (i++) {
            case 0:
            // Code here.
            // ...

В противном случае вам следует рассмотреть возможность использования символьных значений и использовать Character.valueOf(i); а потом двигайтесь дальше. Это будет выглядеть примерно так,
for (i = 0; i < 5; i++) {
     // Map it.
     char ch = Character.valueOf(i);
     System.out.println(i); // No need of (int)int; it is already an int.
         switch (ch++) {
             case '0':
             // code here...

Делать то, что ch++ это законно в Java, потому что символ-это числовое значение, представляющее символ Юникода. Увеличивая его, вы получаете следующий символ и так далее. Если это звучит не так просто, прочтите об арифметике указателей.