我想在非静态类中使用静态随机数。 (JAVA)

时间:2017-07-12 15:34:53

标签: java random static

我正在制作更高或更低的游戏。我在游戏中需要一个随机数,但问题是我每次按下按钮猜测(应用程序使用EditText中的数字进行比较)随机数变化。所以我使用了静态,但现在问题是函数findViewById不再起作用,因为它不是静态的。

这是我的代码:

public static void click (View view) {
    double number = Math.ceil(Math.random()* 20);

    EditText textIn = (EditText) findViewById(R.id.textIn);

    int givenN = Integer.parseInt(textIn.getText().toString());

    if (number > givenN) {
        System.out.println("Higher");
    } else if (number == givenN){
        System.out.println("Good!");
    } else if (number < givenN) {
        System.out.println("Lower");
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

3 个答案:

答案 0 :(得分:3)

  

问题是我每次按下按钮猜测随机   数字变化。

右。所以你需要改变它,所以它只发生一次。把它移到了 onCreate方法似乎对我来说足够合理:

private double number = -1;

public void click (View view) // Note: no longer static.
{
    EditText textIn = (EditText) findViewById(R.id.textIn);
    int givenN = Integer.parseInt(textIn.getText().toString());
    if (number > givenN) {
        System.out.println("Higher");
    } else if (number == givenN){
        System.out.println("Good!");
    } else if (number < givenN) {
        System.out.println("Lower");
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 
    number = Math.ceil(Math.random()* 20);
}

答案 1 :(得分:2)

每次在此行上单击按钮时,您都要更改数字:

double number =  Math.ceil(Math.random()* 20);

您必须从click()中删除此行并将此值生成为onCreate()方法并将其保存到以下字段中:

private double number;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    this.number =  Math.ceil(Math.random()* 20);
}

答案 2 :(得分:0)

如果我很清楚你想要什么,问题是你每次调用click方法时都会重新计算变量'number'。

变量'number'应该是一个类属性,只需计算一次或使用其他函数

private static double number;    

public void click (View view) {
    EditText textIn = (EditText) findViewById(R.id.textIn);
    int givenN = Integer.parseInt(textIn.getText().toString());

    if (number > givenN) {
         System.out.println("Higher");
    } else if (number == givenN){
         System.out.println("Good!");
    } else if (number < givenN) {
         System.out.println("Lower");
    }
}


protected void newNumber() {
    number =  Math.ceil(Math.random()* 20);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    newNumber();
}