【问题标题】:Can we use for loop with switch statement..?我们可以将 for 循环与 switch 语句一起使用吗?
【发布时间】:2019-06-17 21:40:03
【问题描述】:

我正在尝试使用 switch 语句来迭代 for 循环。我想打印该 switch 语句中的特定数据。

我在一个数组中获取数据,比如 5,6,并且我正在通过 switch 语句使用这个数组长度迭代循环。它应该只从 switch 语句中打印第 5 和第 6 个值。但它不起作用。

它在下面输出::::

字符串值的连接 打印 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);
    }
}
}

【问题讨论】:

  • 当然,为什么不呢,但是您在某种程度上编写了很多过时的代码,并且没有按照注释中的说明进行操作(字符串连接)
  • 开关不是迭代,开关只能与一个值比较
  • 我想你是想写st.concat(Integer.parseInt(nums[i]));
  • 清道夫是对的。您当前正在传递这些元素的索引,即 0 和 1。0 将打印 11,1 将打印 1

标签: java for-loop switch-statement


【解决方案1】:

你应该像这样改变循环:

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

在你的代码中你是这样称呼的:

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

所以输出是正确的。

【讨论】:

    【解决方案2】:

    你哪里错了

    您的问题如下:

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

    您将计数器作为参数传递,即st.concat(0),然后进入您的switch语句中的default:选项,打印出11的值。在第二次迭代中,您将传入st.concat(1),它会打印出1 的值。

    如何修复

    您应该传入nums[i],它会在第一次迭代中返回5

    此外,由于您的 concat 方法接受 int,因此您需要进行快速转换: st.concat(Integer.parseInt(nums[i]));

    为了更简单,只需将nums 声明并填充为int 的数组即可:

    int[] nums= { 5, 6 };
    

    【讨论】:

    • 使用parseInt,而不是valueOf(它们分别解析为原始和包装)。
    【解决方案3】:

    让我们首先了解这段代码中发生了什么。在第一次迭代中,i 的值为 0,它使用 concat 方法并尝试匹配 switch 案例,但它没有找到(因为案例是从 1 到 9)并继续对于默认情况,因此打印 print 11 。之后在第二次迭代中, i 的值变为 1 并再次进入 concat 方法,在该方法中找到与案例 1 的完全匹配,因此打印 print 1 。 p>

    现在要从这段代码中得到您所期望的,您需要在 for 循环 的每次迭代中传递数组元素的值。您还需要将 nums 的值从字符串转换为整数,因为您的方法需要 int 数据类型。

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

    【讨论】:

      猜你喜欢
      • 2016-01-02
      • 2015-10-30
      • 2014-09-08
      • 2020-03-26
      • 2021-09-16
      • 2015-09-21
      • 2015-11-07
      • 2022-01-14
      • 2022-07-31
      相关资源
      最近更新 更多