Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.IllegalArgumentException:n必须是正的Android Studio_Java_Android - Fatal编程技术网

java.lang.IllegalArgumentException:n必须是正的Android Studio

java.lang.IllegalArgumentException:n必须是正的Android Studio,java,android,Java,Android,我正在安卓工作室制作一款小行星道奇游戏。我使用java中内置的random生成器为每个小行星创建随机位置。我不断得到java.lang.IllegalArgumentException:n必须是正数,但它在我的手机上仍然运行良好 例外情况: java.lang.IllegalArgumentException: n must be positive   at java.util.Random.nextInt(Random.java:300)   at ca.alnitakstudios.

我正在安卓工作室制作一款小行星道奇游戏。我使用java中内置的
random
生成器为每个小行星创建随机位置。我不断得到
java.lang.IllegalArgumentException:n必须是正数
,但它在我的手机上仍然运行良好

例外情况:

java.lang.IllegalArgumentException: n must be positive
    at java.util.Random.nextInt(Random.java:300)
    at ca.alnitakstudios.Asteroids.Asteroids.<init>(Asteroids.java:38)
    at ca.alnitakstudios.Screens.GameScreen.<init>(GameScreen.java:36)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:802)
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:778)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:500)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:381)
java.lang.IllegalArgumentException:n必须为正
位于java.util.Random.nextInt(Random.java:300)
在阿尔尼塔克工作室。小行星。小行星。(小行星。爪哇:38)
在ca.alnitakstudios.Screens.GameScreen.(GameScreen.java:36)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:526)
位于android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:802)
在android.view.LayoutInflater\u Delegate.rInflate(LayoutInflater\u Delegate.java:64)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:778)
在android.view.LayoutInflater.充气(LayoutInflater.java:500)
在android.view.LayoutInflater.inflate(LayoutInflater.java:381)
代码:

公共级小行星{
私有随机;
private int amount FasteRoid,最快速度,最慢速度,
最大的,最小的;
私人整数[]x,y,速度,半径;
公共小行星(){
类胡萝卜素=5;
x=新的整数[amountoroids];
y=新的整数[amoonteroid];
速度=新整数[amountoroids];
半径=新整数[amoonteroid];
最快速度=7;
最慢速度=3;
最大=20;
最小=10;
随机=新随机();
for(int i=0;i
}

将负值传递给
nextInt
方法,确保在扣除
最快速度-最慢速度
最大-最小速度
时,该值不为负值。或者也可以使用Math.abs使所有负数为正数

示例:

Math.abs(fastestSpeed - slowestSpeed)

查看您的堆栈跟踪,可能是因为您试图在
GameScreen
初始化期间使用
GameScreen
的静态成员。这些静态成员是否正确初始化为正值?如果它们被初始化为
0
,这将是一个问题


由于您非常确定它应该始终为正值,但不知何故仍然会得到零或负值,因此我建议您创建一个虚拟
Random
类进行调试

package ca.alnitakstudios.Asteroids;

public class Random {
    private java.util.Random r = new java.util.Random();

    public int nextInt(int i) {
        //Debugging (enable if you need to trace)
        //new Exception().printStackTrace();

        //(or you can also:)
        //StackTraceElement ste = new Exception().getStackTrace()[1]; //the caller
        //print out ste.getClassName(), ste.getMethodName(), ste.getLineNumber() etc.

        System.err.println("nextInt called with value " + i);
        return r.nextInt(i);
    }
}

这应该覆盖
小行星
类中使用的
随机
类,否则您可以显式导入它。没有其他代码更改是必要的,因此您可以确定您没有无意中修复任何东西。

不幸的是,这没有帮助。我仍然得到错误。我想这很好,因为我在手机上仍然运行正常,只是弹出错误让人恼火。@TouchyGibbons然后确保结果值不是负值我已经打印出了每个整数,而且似乎都是正值。我将补充一些额外的细节。我使用的是AndroidStudio 0.8.0,当我遇到这个错误时,它还表示存在渲染问题。我在游戏屏幕布局上使用自定义视图。希望这些细节有帮助!很明显,
fastestSpeed-slowestSpeed
maxist-minimable
都是正整数,所以
GameScreen.width
GameScreen.height
似乎都是负整数。@matiash这也是我的想法。但这似乎证明我们错了。我甚至试着在
GameScreen
Asternodes
中打印这两个元素,但它们仍然都是正数以防万一,记住0也不算正数。:)还有一种可能性是,
GameScreen.width
是一个非常大的数字,将其乘以2会导致溢出,将其变成负值。但我对此表示怀疑。堆栈跟踪显示问题出在
GameScreen
初始化时。@matiash我知道0不是一个正数,而且我从来没有看到0出现过,所以算了@suninsky对于stack trace说问题出在
GameScreen
那只是因为我在那里创建了一个小行星的实例。谢谢你的努力,但它仍然不起作用。我开始认为这是android studio中的一个bug。这只是在我将类移动到另一个包之后才开始发生的,而且它在我的手机上运行良好,所以很明显这不是在我的手机上产生的错误。
Math.abs(fastestSpeed - slowestSpeed)
package ca.alnitakstudios.Asteroids;

public class Random {
    private java.util.Random r = new java.util.Random();

    public int nextInt(int i) {
        //Debugging (enable if you need to trace)
        //new Exception().printStackTrace();

        //(or you can also:)
        //StackTraceElement ste = new Exception().getStackTrace()[1]; //the caller
        //print out ste.getClassName(), ste.getMethodName(), ste.getLineNumber() etc.

        System.err.println("nextInt called with value " + i);
        return r.nextInt(i);
    }
}