2013-04-24 93 views
0

我想创建一个程序来生成随机数并存储到arraylist。 同时获取存储的号码multiply随机数存储在数组列表中,并从中选择

我有存储生成的号码,但我怎么才能真正得到我想要的号码。 对于这个例子,我试图得到3rd number,我错过了哪一步?

public class arraylist { 

    public static void main(String[] args) { 

     List<Integer> list = new ArrayList<Integer>(); 
     Random rand = new Random(); 

     int numtogen; 
     int third; 
     Scanner scan = new Scanner(System.in); 
     System.out.println("How many number do you want to generate: "); 
     numtogen = scan.nextInt(); 
     System.out.println("What number do you want to multiply with the third number: "); 
     third = scan.nextInt(); 

     HashSet<Integer> generated = new HashSet<Integer>(); 

     // Prevent repeat 
     for (int x = 1; x <= numtogen; ++x) { 
      while (true) { 
       // generate a range from 0-100 
       int ranNum = rand.nextInt(100); 

       if (generated.contains(ranNum)) { 

        continue; 
       } else { 
        list.add(ranNum); 
        System.out.println("Number " + x + "=" + " = " + ranNum); 
        break; 
       } 

      } 

     } 
     int numinlist; 
     while (!list.isEmpty()) { 

      // Integer[] numlist= numbinlist.hasNextInt; 

      // int answer = numlist[2]*third; 
      // System.out.println("Answer to first number = "+answer); 
     } 
    } 

} 
+1

你想做什么是相当不清楚。 – Zyerah 2013-04-24 07:04:08

+0

第三个随机数只是一个随机数。 List或Set是多余的,所以你可以做'int triple = rand.nextInt(100)* 3;'不管它们输入什么(我假设这只是一个练习;) – 2013-04-24 07:04:40

回答

3

你可以不重复数字的生成更改为:

Set<Integer> generated = new LinkedHashSet<Integer>(); 
// Prevent repeat 
while (generated.size() < numtogen) { 
    generated.add(rand.nextInt(100)); 
} 
List<Integer> list = new ArrayList<Integer>(generated); 

我了解你的实际问题,并知道答案,我会尽快修改这个答案。

+0

优化好的代码! 。 newbieprogrammer你不需要使用无限while循环并打破它。 – 2013-04-24 07:05:07

+0

+1使用'Set'进行优化优化# – Stephan 2013-04-24 07:07:52

+0

感谢编码较短= D – newbieprogrammer 2013-04-24 07:20:18

3

如果你想获得第三生成的数字试试这个:

int number = list.get(2); 
+2

第三个数字实际上是'list.get(2);' – jlordo 2013-04-24 07:03:36

+1

+1似乎是一个很好的猜测。无论如何,这个问题需要编辑。哦,修复索引,请 – Jayan 2013-04-24 07:03:45

+0

@jlordo是啊我们的权利,因为它从0开始,thx队友 – Stephan 2013-04-24 07:04:22

1

改变这一点:

for (int x = 1; x <= numtogen; ++x) { 
    while (true) { 
     // generate a range from 0-100 
     int ranNum = rand.nextInt(100); 

     if (generated.contains(ranNum)) { 

      continue; 
     } else { 
      list.add(ranNum); 
      System.out.println("Number " + x + "=" + " = " + ranNum); 
      break; 
     } 
    } 
} 

到:

for (int x = 1; x <= numtogen; ++x) { 
    // generate a range from 0-100 
    int ranNum = rand.nextInt(100); 
    if (generated.contains(ranNum)) { 
     continue; 
    } else { 
     list.add(ranNum); 
     System.out.println("Number " + x + "=" + " = " + ranNum); 
    } 
} 

然后,所有你需要做的访问第三个号码是这样的:

int answer = (list.get(2) * third);