为什么这段代码不生成随机码?

时间:2012-01-24 18:33:10

标签: java random arraylist

import java.util.ArrayList;
import java.util.Random;

public class Generator{
//9352141NTBG1223

public static void main(String[] args) {
    ArrayList<Integer> intArray = new ArrayList<Integer>();
    ArrayList<Integer> int2Array = new ArrayList<Integer>();
    ArrayList<Character> charArray = new ArrayList<Character>();

    int one = 0;
    int two = 0;
    int three = 0;
    int four = 0;
    int five = 0;
    int six = 0;
    int seven = 0;
    int N_one = 0;
    int N_two = 0;
    int N_three = 0;
    int N_four = 0;
    Character Middle1 = 'A';
    Character Middle2 = 'A';
    Character Middle3 = 'A';
    Character Middle4 = 'A';

    Random gen1 = new Random();

    charArray.add(Middle1);
    charArray.add(Middle2);
    charArray.add(Middle3);
    charArray.add(Middle4);
    intArray.add(one);
    intArray.add(two);
    intArray.add(three);
    intArray.add(four);
    intArray.add(five);
    intArray.add(six);
    intArray.add(seven);
    int2Array.add(N_one);
    int2Array.add(N_two);
    int2Array.add(N_three);
    int2Array.add(N_four);

    for(int i: intArray) {
    int k = gen1.nextInt(10);
    i = k;
    }
    for(int i: int2Array) {
    int k = gen1.nextInt(10);
    i = k;
    }
    for(char i: charArray) {
        int b = gen1.nextInt(20);
        switch (b) {
        case 1: i = 'H'; break;
        case 2: i = 'R'; break;
        case 3: i = 'F'; break;
        case 4: i = 'Y'; break;
        case 5: i = 'U'; break;
        case 6: i = 'Q'; break;
        case 7: i = 'T'; break;
        case 8: i = 'N'; break;
        case 9: i = 'B'; break;
        case 10: i = 'L'; break;
        case 11: i = 'K'; break;
        case 12: i = 'P'; break;
        case 13: i = 'I'; break;
        case 14: i = 'Z'; break;
        case 15: i = 'X'; break;
        case 16: i = 'V'; break;
        case 17: i = 'C'; break;
        case 18: i = 'E'; break;
        case 19: i = 'M'; break;
        }
    }
    System.out.print("Generated Code: ");
    for(int i: intArray) {
    System.out.print(i);
    }
    for(char i: charArray) {
    System.out.print(i);
    }
    for(int i: int2Array) {
    System.out.print(i);
    }
}

  }

我是一个非常有经验的程序员,所以我设计了一个代码,这个代码曾经在方法和东西但它只是不会工作所以我在主方法中直接尝试它并没有生成一个随机代码它只是打印超出默认值!发生了什么我已经尝试了一切!这毫无意义!

4 个答案:

答案 0 :(得分:3)

在(例如)for(int i: intArray)中,i不是intArray元素的别名;它只是一个设置为intArray的每个元素的变量。所以这个:

    for(int i: intArray) {
    int k = gen1.nextInt(10);
    i = k;
    }

相当于:

    for(int index = 0; index < intArray.size(); ++index)
    {
        int i = intArray[index];
        int k = gen1.nextInt(10);
        i = k;
    }

(即,它将i设置为等于intArray[index],但随后将其设置为完全不同的东西。你真正需要的是:

    for(int index = 0; index < intArray.size(); ++index)
        intArray[index] = gen1.nextInt(10);

答案 1 :(得分:2)

for(int i: intArray) {
    int k = gen1.nextInt(10);
    i = k;
}

这不是您如何向列表添加值,而只是将k分配给局部变量i。尝试:

for(int i=0; i<intArray.size(); i++) {
    int k = gen1.nextInt(10);
    intArray.set(i,k);
}

你应该对你犯同样错误的代码的其他部分做出类似的调整。

答案 2 :(得分:0)

在for循环中,您没有将值分配到列表中,因此它们的值不会更改。

for(int i: intArray) {
    int k = gen1.nextInt(10);
    intArray.set(i, k);
}

可能就是你要找的东西。

答案 3 :(得分:0)

替换你的int循环:

for (int i = 0; i < int2Array.size(); i++) {
  int2Array.set(i, gen1.nextInt(10));
}
for (int i = 0; i < intArray.size(); i++) {
  intArray.set(i, gen1.nextInt(10));
}