【问题标题】:Can I assign each element in a list to a separate variable?我可以将列表中的每个元素分配给单独的变量吗?
【发布时间】:2021-03-10 20:54:50
【问题描述】:

我有一个包含 16 个数字的列表,我希望将它们设置为变量 n1-n16。我正在寻找类似于How to assign each element of a list to a separate variable? 的东西,但用于java。

我的代码是:

 public void setVar()
  {
    //x = 16;
    cardNumR = cardNum;
    reversed = 0;
    while(cardNumR != 0) {
        digit = cardNumR % 10;
        reversed = reversed * 10 + digit;
        cardNumR /= 10;
    }
    ArrayList<Long> nums = new ArrayList<Long>(x);
    for (int x = 16; x > 0; x--)
    {
      nums.add(reversed % 10);
      reversed -= (reversed % 10);
      reversed /= 10;
    length = nums.size();
    if (length == 16)
    {
      System.out.println(nums);
    }
    }
  }

这让我得到了以下结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6]

我想获取这些元素中的每一个并设置n1 = 1n2 = 2n3 = 3 等等,这样n16 = 6。我希望能够在最后做到这一点:

(2*n1) + n2 + (2*n3) + n4 + (2*n5) + n6 + (2*n7) + n8 + (2*n9) + n10 + (2*n11) + n12 + (2*n13) + n14 + (2*n15) + n16

有没有一种方法可以通过循环来做到这一点,这样我就不必一个一个地做?

【问题讨论】:

    标签: java variables collections


    【解决方案1】:

    你不需要这么多变量。改用循环:

    int sum = 0;
    for(int i = 0; i < nums.size(); i++) {
        if(i % 2 == 0) {
           // odd index
           sum += 2 * nums.get(i);
        } else {
           // even index
           sum += nums.get(i); 
        }  
    }
    

    【讨论】:

    • 我认为条件倒置没有?
    • @dreamcrash 对。像往常一样,off-by-one 错误:-)
    • 我没有看到错误,是否已更改/编辑?
    • @DanielTam 是的。最初的答案有相反的条件。当前版本应该可以正常工作。
    【解决方案2】:

    好吧,我会使用一个数组

    int [] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6};
    

    或者一个列表:

    List<Integer> nums = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6);
    

    并应用以下公式:

    数组

    int result = 0;
    for(int i = 0; i < array.length; i++) {
        result += (i % 2 == 0) ? 2 * array[i] : array[i];
    }
    

    或者如果您想避免使用模数 (%) 操作:

    int result = 0
    for(int i = 0; i < array.length; i+=2)
        result += 2 * array[i];
    
    for(int i = 1; i < array.length; i+=2)
        result += array[i];
    

    列表

    int result = 0;
    for(int i = 0; i < nums.size(); i++) {
        result += (i % 2 == 0) ? 2 * nums.get(i) : nums.get(i);
    }
    

    没有取模运算:

    int result = 0
    for(int i = 0; i < nums.size(); i+=2)
        result += 2 * nums.get(i); 
    
    for(int i = 1; i < nums.size(); i+=2)
        result += nums.get(i);
    

    Java 流:

    int result = IntStream.range(0, nums.size())
                          .mapToLong(i -> (i % 2 == 0) ? 2 * nums.get(i) : nums.get(i))
                          .sum();
    

    【讨论】:

      猜你喜欢
      • 2014-02-14
      • 2021-07-02
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多