2011-10-11 114 views
1

如何在Android Java中创建一个最小值和最大值之间的随机数,排除最小值和最大值之间的一些数字?如何在Android Java中创建一个最小值和最大值之间的随机数,排除最小值和最大值之间的一些数字?

我有三个变量,每个变量都是1-100之间的一个随机数。我可以使用math.rand()来做随机数,但我试图确保三个数字不匹配。我围绕while和if语句做了一些工作,但是我正在查看是否有一行命令来执行此操作,以便我可以将它放在活动类的正下方,以便它是public var。在那个领域(活动)我不能使用while和if语句,我只能在onCreate由于void或其他东西。

预先感谢您的帮助,并会投票给任何帮助或想法,导致找到任何有关这方面的信息。

+1

看看这个[post](http://stackoverflow.com/questions/363681/java-generating-random-number-in-a-range)它描述了你想要做什么。 –

回答

0

这是我的AndroidActivity代码,它的工作原理。

package com.androidbook.droid1; 
import java.util.Random; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.TextView; 
public class DroidActivity3 extends Activity 
{ 
public static class GetThreeRandomIntClass 
{ 
    public static class Dots 
    { 
     public int a; 
     public int b; 
     public int c; 

     public Dots() 
     { 
       a = 0; 
       b = 0; 
       c = 0; 
     } 

     @Override 
     public String toString() 
     { 
      return "[" + a + "]" + "[" + b + "]" + "[" + c + "]"; 
     } 
    } 

    public static void getThreeRandomInt(Dots d) 
    { 
     int[] arr = new int[100]; 
     Random r = new Random(); 
     for(int i=0; i<arr.length ; i++){ 
      arr[i] = i + 1; 
     } 
     int randInt = r.nextInt(100); 
     d.a = arr[randInt]; 
     for(int i=randInt; i<arr.length - 1 ; i++){ 
      arr[i] = arr[i + 1]; 
     } 
     randInt = r.nextInt(99); 
     d.b = arr[randInt]; 
     for(int i=randInt; i<arr.length - 2 ; i++){ 
      arr[i] = arr[i + 1]; 
     } 
     randInt = r.nextInt(98); 
     d.c = arr[randInt]; 
    } 
} 




@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 

    this.setContentView(R.layout.third); 

    GetThreeRandomIntClass.Dots d = new GetThreeRandomIntClass.Dots(); 
    GetThreeRandomIntClass.getThreeRandomInt(d); 

    TextView textView1 = (TextView) this.findViewById(R.id.textView1); 
    textView1.setText(String.valueOf(d.a)); 

    TextView textView2 = (TextView) this.findViewById(R.id.textView2); 
    textView2.setText(String.valueOf(d.b)); 

    TextView textView3 = (TextView) this.findViewById(R.id.textView3); 
    textView3.setText(String.valueOf(d.c)); 

    super.onCreate(savedInstanceState); 
}} 
+0

谢谢你,谢谢你,谢谢!!!,这是非常有帮助:) –

+0

我很乐意提供帮助 –

2

不需要“一行命令”。你可以使用构造函数或初始化块来做任何你想做的事情。

public class blah 
{ 
    public int a, b, c; 

    // this runs when the object is created 
    { 
     Random r = new Random(); 
     a = r.nextInt(100) + 1; 
     do { b = r.nextInt(100) + 1; } while (a == b); 
     do { c = r.nextInt(100) + 1; } while (a == c || b == c); 
    } 
} 

当然,你可以把这个东西变成一个构造太 - 事实上,这几乎是什么Java那样使用它时,它看到它。即使像public int x = 1;这样的初始化内容实际上也会进入构造函数。将它放入构造函数的唯一缺点是,您需要将其添加到每个构造函数中,而如果使用初始化程序(块或单个语句),则Java会为您执行此操作。

+0

谢谢,简洁明了。 –

1

所有这些软件程序本质上都是伪随机数生成器,而不是真正的随机数生成器。所以在某些角落/遥远的情况下,最终可能会得到相同的连续生成的随机数。所以除了放置while循环/ if else块来处理这样的角落案例之外,没有别的选择。所以我认为你已经在做正确的理想事情了,while循环/如果其他块不应该成为问题,因为随机数冲突将是罕见的情况。

0

如果你想得到3个不同的随机整数,没有任何“if”或“while”,你可以使用getThreeRandomInt方法。 (我创建一个测试帮助类 '点',它不是nessesery)

package Random; 

进口静态org.junit.Assert *。

import java.util.Random;

import org.junit.Test;

公共类getThreeRandomInt { 公共静态类点 { 公众诠释一个; public int b; public int c;

public Dots() 
    { 
     a = 0; 
     b = 0; 
     c = 0; 
    } 

    @Override 
    public String toString() 
    { 
     return "[" + a + "]" + "[" + b + "]" + "[" + c + "]"; 
    } 
} 

public static void getThreeRandomInt(Dots d) 
{ 
    int[] arr = new int[100]; 
    Random r = new Random(); 
    for(int i=0; i<arr.length ; i++){ 
     arr[i] = i + 1; 
    } 
    int randInt = r.nextInt(100); 
    d.a = arr[randInt]; 
    for(int i=randInt; i<arr.length - 1 ; i++){ 
     arr[i] = arr[i + 1]; 
    } 
    randInt = r.nextInt(99); 
    d.b = arr[randInt]; 
    for(int i=randInt; i<arr.length - 2 ; i++){ 
     arr[i] = arr[i + 1]; 
    } 
    randInt = r.nextInt(98); 
    d.c = arr[randInt]; 
} 

@Test 
public void test() 
{ 
    Dots d = new Dots(); 

    for(int i=0; i<300000; i++){ 
     getThreeRandomInt(d); 
     assertFalse(d.a == d.b || d.a == d.c || d.b == d.c); 
     //System.out.println(d.toString()); 
    } 
} 

}

+0

我从尝试代码(从getThreeRandomInt(d))中得到此错误;在底部,错误消息是: 方法getThreeRandomInt(MytestActivity.getThreeRandomInt.Dots)未定义类型MytestActivity.getThreeRandomInt –

+0

我做过,看到下面的帖子中的代码(作为最底部的答案) –

+0

我添加了android测试的代码作为一个新的答案。它的工作在我的android-elmulator –

1

它必须通过一些条件表达式来完成(如,同时,做-while等),由于所产生的号码必须是“检查”,看它们是否相等。

如果变量是静态的,你应该静态建设子句中对它们进行初始化:

public class MyClass { 
    public static final int a, b, c; 

    static { 
     // generate the random numbers here // 
    } 
} 

如果不是静态的,您可以在该活动的onCreate方法初始化它们。在调用活动之前使用它们或将它们标记为final的情况下,应该在活动的构造函数中初始化它们。

相关问题