Можем ли мы использовать для цикла с оператором switch ..? - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь перебрать цикл с помощью оператора switch.Я хочу напечатать определенные данные из этого оператора switch.

Я беру данные в одном массиве, например 5,6, и я повторяю цикл с этой длиной массива оператором switch.он должен печатать 5 и 6 значения только из оператора switch.Но он не работает.

он выдает нижеследующее: ::::

Конкатенация строкового значения Печать 11 Конкатенация строкового значения Печать 1

public class String_Concat {

public void concat(int n){
    System.out.println("Concatination of String value");

     switch (n)
        {
            case 1 : 
                System.out.println("Print 1");
                break;
            case 2 : 
                System.out.println("Print 2");
                break;
            case 3 : 
                System.out.println("Print 3");
                break;
            case 4 : 
                System.out.println("Print 4");
                break;
            case 5 : 
                System.out.println("Print 5");
                break;
            case 6 : 
                System.out.println("Print 6");
                break;
            case 7 :
                System.out.println("Print 7");
                break;
            case 8 :
                System.out.println("Print 8");
                break;
            case 9 : 
                System.out.println("Print 9");
                break;
            case 10 : 
                System.out.println("Print 10");
                break;

            default :
                System.out.println("Print 11");

        }
}

public static void main(String[] rags){
    String[] nums={"5","6"};
    String_Concat st=new String_Concat();
    for(int i=0;i<nums.length;i++){
        st.concat(i);
    }
}
}

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Вы должны изменить цикл следующим образом:

for(int i=0;i<nums.length;i++){
            st.concat(Integer.valueOf(nums[i]));
        }

В своем коде вы называете это:

st.concat(0);
st.concat(1);

так что вывод правильный.

0 голосов
/ 24 января 2019

Давайте сначала разберемся, что происходит в этом коде.На первой итерации значение i равно 0, с которым он переходит к методу concat и пытается сопоставить его со случаями коммутатора, но не находит ни одного (так как случаи от 1 до 9) и обращается крегистр по умолчанию и, следовательно, печатает печать 11 .После этого во второй итерации значение i становится 1, и оно снова переходит в метод concat, где находит точное совпадение со случаем 1 и, следовательно, печатает print 1 .

Теперь, чтобы получить то, что вы ожидаете от этого кода, вам нужно передавать значение элементов массива в каждой итерации для цикла .Кроме того, вам необходимо преобразовать значения чисел из строки в целое число, поскольку ваш метод ожидает int тип данных.

st.concat (Integer.parseInt (nums [i]))

0 голосов
/ 24 января 2019

Где вы ошиблись

Ваша проблема в следующем:

for(int i=0;i<nums.length;i++){
    st.concat(i);
}

В качестве аргумента вы передаете счетчик, то есть st.concat(0), который затем входит в параметр default: в вашем выражении switch, выводя значение 11. Во второй итерации вы передаете st.concat(1), который выводит значение 1.

Как исправить

Вместо этого вы должны передать nums[i], который вернет вам 5 в первой итерации.

Кроме того, поскольку ваш метод concat принимает int, вам необходимо выполнить быстрое преобразование: st.concat(Integer.parseInt(nums[i]));

Чтобы упростить задачу, просто объявите и заполните nums как массив int вместо:

int[] nums= { 5, 6 };
...