给定大数时应用程序崩溃

时间:2014-02-14 07:25:23

标签: java android long-integer

我创建了一个应用程序,它可以生成2个给定值之间的随机数,并且它的工作效果就像它说的那样,但是如果我在最大值(或最小值)中输入了11位数,应用程序崩溃我该如何解决它是另外一种生成随机数以支持大值的方法是代码

        Button gen = (Button)findViewById(R.id.button);
        final EditText mini = (EditText)findViewById(R.id.mini);
        final EditText maxi = (EditText)findViewById(R.id.maxi);
        final TextView res = (TextView)findViewById(R.id.result);

        final Random r = new Random();
        final int[] number = {0};

        gen.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
                int minn = Integer.parseInt(mini.getText().toString());
                int maxx = Integer.parseInt(maxi.getText().toString());

                if (minn>=maxx){
                   maxi.setText(String.valueOf(minn));
                   mini.setText(String.valueOf(maxx));
                   maxx = Integer.parseInt(maxi.getText().toString());
                   minn = Integer.parseInt(mini.getText().toString());
                   number[0] = minn + r.nextInt(maxx - minn + 1);
                   res.setText(String.valueOf(number[0]));
               }else{
                   number[0] = minn + r.nextInt(maxx - minn + 1);
                   res.setText(String.valueOf(number[0]));
               }
               getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
            }   
       });
} 

5 个答案:

答案 0 :(得分:2)

你必须使用long或double而不是Integer。因为Integer不支持那么大的值。

long minn = Long.parseInt(mini.getText().toString());
           long maxx = Long.parseInt(maxi.getText().toString());

double minn = Double.parseInt(mini.getText().toString());
               double maxx = Double.parseInt(maxi.getText().toString());

答案 1 :(得分:1)

这是因为Integer类不支持大的值。尝试使用Longs或Floats。这应该有用。

答案 2 :(得分:1)

int的最大值是2,147,483,647

如果您需要更高的值,请使用long

答案 3 :(得分:1)

将minn和maxx变量设置为 long

<强>整数:

  • MAX VALUE = 2147483647
  • MIN VALUE = -2147483648

<强>长:

  • MAX VALUE = 9223372036854775807
  • MIN VALUE = -9223372036854775808

了解更多信息: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

答案 4 :(得分:0)

如果你想操作非常大的数字,请使用BigInteger.Integer无法处理大数字,这就是为什么它失败的原因。