我试图创建一个引用生成器应用程序,应用程序的关键部分是随机()。但由于某种原因,随机在我的MainActivity中,应用程序不会编译。
package com.example.alpak.liftquote;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// WHERE MY CODE STARTS
//RANDOM GENERATOR that DOESN'T WORK
Random rand = new Random();
final int irandomIndex = rand.nextInt((3 - 1) + 1)+1;
final int drandomIndex = rand.nextInt((4 - 6) + 1)+4;
final int prandomIndex = rand.nextInt((7 - 9) + 1)+7;
final String iIndex = "s"+irandomIndex;
final String dIndex = "s"+drandomIndex;
final String pIndex = "s"+prandomIndex;
final String RiIndex = getString(getApplicationContext().getResources().getIdentifier(iIndex, "string", getPackageName()));
final String RdIndex = getString(getApplicationContext().getResources().getIdentifier(dIndex, "string", getPackageName()));
final String RpIndex = getString(getApplicationContext().getResources().getIdentifier(pIndex, "string", getPackageName()));
//STRING
final TextView txt = (TextView) findViewById(R.id.textView);
//BUTTONS
//
Button inspireBtn = (Button) findViewById(R.id.iButton);
Button deepBtn = (Button) findViewById(R.id.dButton);
Button positiveBtn = (Button) findViewById(R.id.pButton);
// ON CLICK LISTENRS
inspireBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
txt.setText(RiIndex);
//"cannot resolve symbol 'index';"
}
});
我收到的错误消息是:
。
引起:java.lang.IllegalArgumentException:n< = 0:-1
答案 0 :(得分:3)
你的约束必须是积极的
检查Random#nextInt
Javadoc
抛出:IllegalArgumentException - 如果绑定不是肯定的
以下两行将引发异常。
final int drandomIndex = rand.nextInt((4 - 6) + 1)+4;
final int prandomIndex = rand.nextInt((7 - 9) + 1)+7;
答案 1 :(得分:0)
您的代码导致负数
final int drandomIndex = rand.nextInt((4 - 6) + 1)+4;
final int prandomIndex = rand.nextInt((7 - 9) + 1)+7;
4-6和7-9给出负最大值
答案 2 :(得分:0)
使用Random时,参数必须为正数,否则会引发异常:
抛出:IllegalArgumentException
- 如果绑定不是正面
您的代码在zero
中生成负值:
nextInt()
相当于:
final int irandomIndex = rand.nextInt((3 - 1) + 1) +1;
final int drandomIndex = rand.nextInt((4 - 6) + 1) +4;
final int prandomIndex = rand.nextInt((7 - 9) + 1) +7;
请注意,在添加之后的数字之前,将首先评估rand.nextInt()。因此final int irandomIndex = rand.nextInt(-1) +1; //negative value in nextInt()
final int drandomIndex = rand.nextInt(-1) +4; //negative value in nextInt()
final int prandomIndex = rand.nextInt(-1) +7; //negative value in nextInt()
不等于 到rand.nextInt(-1) +4;
答案 3 :(得分:0)
nextInt(int)
生成一个从0(包括)到n(不包括)的数字。例如,nextInt(3)
可能产生0,1或2.因此,值<= 0只是没有意义;你不能产生数字R,使得0 <= R&lt; n如果n是负数。
从您的代码中,您似乎在尝试在两个值之间生成一个随机数。您应该rand.nextInt((7 - 9) + 1)+7
而不是rand.nextInt(9 - 7) + 7
。这将使它像nextInt(2) + 7
,它是(0或1)+ 7,它是7或8.如果你还想产生值9,那么你必须在括号内添加一个。但是在这种情况下,最好只传入10(所以,nextInt(10 - 7) + 7
),这样你就会习惯于下界是包容性的,而上界是独占的 - 这是Java中一种非常常见的模式
更一般地说,要在min
(包括)和max
(不包括)之间生成随机int,公式为nextInt(max - min) + min
。