简体   繁体   中英

Can I assign each element in a list to a separate variable?

I have a list of 16 numbers, and I want them set as variables n1-n16. I'm looking for something similar to How to assign each element of a list to a separate variable? , but for java.

My code is:

 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);
    }
    }
  }

which gets me a result of:

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

I want to take each of these elements and set n1 = 1 , n2 = 2 , n3 = 3 so on and so forth such that n16 = 6 . I want to be able to do this at the end:

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

Is there a way I can do this with a loop so that I don't have to do it one by one?

You don't need so many variables. Use a loop instead:

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); 
    }  
}

Well I would just use an array

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

or a list for that:

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

and apply the following formula:

Arrays

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

or if you want to avoid the use of the modulus (%) operation:

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];

Lists

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

without the modulus operation:

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 Streams:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM