如何在Android Java中创建一个介于最小值和最大值之间的随机数,不包括一些介于最小值和最大值之间的数字。?

如何在Android Java中创建一个介于最小值和最大值之间的随机数,不包括一些介于最小值和最大值之间的数字。?,java,android,random,public,Java,Android,Random,Public,如何在Android Java中创建一个介于最小值和最大值之间的随机数,不包括一些介于最小值和最大值之间的数字 我有三个变量,每个变量是1-100之间的随机数。我可以用math.rand做随机数,但我正在努力确保这三个数字不匹配。我做了一项关于使用while和if语句的工作,但我想看看是否有一行命令来完成这项工作,这样我就可以把它放在活动类下面,这样它就是公共变量。在活动区域中,我不能使用while和if语句,我只能在onCreate中,因为有空或其他原因 提前感谢您的帮助,并将投票支持任何有助

如何在Android Java中创建一个介于最小值和最大值之间的随机数,不包括一些介于最小值和最大值之间的数字

我有三个变量,每个变量是1-100之间的随机数。我可以用math.rand做随机数,但我正在努力确保这三个数字不匹配。我做了一项关于使用while和if语句的工作,但我想看看是否有一行命令来完成这项工作,这样我就可以把它放在活动类下面,这样它就是公共变量。在活动区域中,我不能使用while和if语句,我只能在onCreate中,因为有空或其他原因


提前感谢您的帮助,并将投票支持任何有助于查找有关此信息的帮助或想法

不需要一行命令。您可以使用构造函数或初始值设定项块来做任何您想做的事情

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会为您执行此操作。

不需要一行命令。您可以使用构造函数或初始值设定项块来做任何您想做的事情

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会为您执行此操作。

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

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

如果您想要获得3个不同的随机整数,而不使用任何“if”或“while”,您可以使用GetThreeDomain方法。 我为测试创建帮助类“点”,这不是必要的

package Random;
导入静态org.junit.Assert.*

导入java.util.Random

导入org.junit.Test

公共类getthreerondomint { 公共静态类点 { 公共INTA; 公共int b; 公共INTC

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

}

如果您想获得3个不同的随机整数,而不使用任何“If”或“while”,则可以使用getthreendommint方法。 我为测试创建帮助类“点”,这不是必要的

package Random;
导入静态org.junit.Assert.*

导入java.util.Random

导入org.junit.Test

公共类getthreerondomint { 公共静态类点 { 公共INTA; 公共int b; 公共INTC

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

}如果、while、do-while等,则必须通过一些条件表达式来完成,因为必须“检查”生成的数字,以查看它们是否相等

如果变量是静态的,则应在静态构造子句中初始化它们:

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

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

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

必须通过一些条件表达式If、while、do while等来完成,因为生成的数字必须是“c”质问他们是否平等

如果变量是静态的,则应在静态构造子句中初始化它们:

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

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

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

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

这是我的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);
}}
看看这个,它描述了你想做什么。看看这个,它描述了你想做什么
好的。谢谢你,简短而简洁。谢谢你,简短而简洁。我从GetThreerDomaind尝试你的代码时发现这个错误;在底部,错误消息是:类型MytestActivity.GetThreOrandomini.Dots的方法GetThreOrandominit.Dots未定义。GetThreOrandominiti未定义,请参阅下面帖子中的代码作为最底部的答案I添加android测试代码作为新答案。它在我的android上工作,我从GetThreOrandomintd尝试你的代码时遇到这个错误;在底部,错误消息是:类型MytestActivity.GetThreOrandomini.Dots的方法GetThreOrandominit.Dots未定义。GetThreOrandominiti未定义,请参阅下面帖子中的代码作为最底部的答案I添加android测试代码作为新答案。它正在我的android elmulator上工作