Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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存储点(x,y)_Java_Arrays - Fatal编程技术网

使用二维数组java存储点(x,y)

使用二维数组java存储点(x,y),java,arrays,Java,Arrays,我想写一个像bouncingBall这样的程序。但我在屏幕上制造了N个障碍。每次球碰到障碍物时,障碍物就会消失并出现在另一个随机位置。我尝试使用二维数组来存储随机生成的障碍物点(x,y) 现在,如果我输入N>50,它会让我失去绑定。 但我想要的是存储从(0,0)到(50,50)的点…我应该如何使用二维数组来实现这一点 谢谢 导入java.util.ArrayList public class BouncingBall { public static void main(String[

我想写一个像bouncingBall这样的程序。但我在屏幕上制造了N个障碍。每次球碰到障碍物时,障碍物就会消失并出现在另一个随机位置。我尝试使用二维数组来存储随机生成的障碍物点(x,y)

现在,如果我输入N>50,它会让我失去绑定。 但我想要的是存储从(0,0)到(50,50)的点…我应该如何使用二维数组来实现这一点

谢谢

导入java.util.ArrayList

public class BouncingBall { 

    public static void main(String[] args) {

        if (args.length < 1) {
            System.out.println("Usage: java BouncingBall N");
            System.exit(0);
        }

        int N = Integer.parseInt(args[0]); 
        if (N > 2500) {
            System.out.println("Usage: java BouncingBall N<=2500");
            System.exit(0);
        }
        double[][] myArray = new double[50][50];

        // set the scale of the coordinate system
        StdDraw.setXscale(-1.0, 1.0);
        StdDraw.setYscale(-1.0, 1.0);

        // initial values
        double rx = 0.480, ry = 0.860;     // position
        double vx = 0.015, vy = 0.023;     // velocity
        double radius = 0.02;              // radius       
        double x;
        double y;
        double a[] = new double[2];

        StdDraw.setPenColor(StdDraw.WHITE);
        StdDraw.filledSquare(0, 0, 1.0);
        StdDraw.setPenColor(StdDraw.BLACK); 
        for(int i=0; i <= N; i++){
            x = 2.0*(double)Math.random()-1.0;
            y = 2.0*(double)Math.random()-1.0;
            for   (int  t=0;t <50;t++){ 
                for   (int   j=0;j <50;j++){ 
                      myArray[t][j]= x; 
                      myArray[j][t]= y; 
                } 
            } 
            StdDraw.filledSquare(x, y, 0.02);
            }

        // main animation loop
        while (true)  { 

            // bounce off wall according to law of elastic collision
            if (Math.abs(rx + vx) > 1.0 - radius) vx = -vx;
            if (Math.abs(ry + vy) > 1.0 - radius) vy = -vy;
            // clear the background   
            StdDraw.setPenColor(StdDraw.WHITE);
            StdDraw.filledSquare(0, 0, 1.0); 
            StdDraw.clear(); 

       StdDraw.setPenColor(StdDraw.BLACK);  

       for(int t=0; t <= N; t++){
           for   (int   j=0;j <50;j++){ 
                 x = myArray[t][j]; 
                 y = myArray[j][t]; 
           } 
        if ((Math.abs(rx + vx) > x - radius)||(Math.abs(ry + vy) > y - radius))
        {  //if the ball touch the square
            vx = -vx;
            vy = -vy;
            if (args.length == 2 && args[1].equals("-d")){
            x = 2.0*(double)Math.random()-1.0;  //new random x
            y = 2.0*(double)Math.random()-1.0;  //new random y
            }else{
                ;
            }
            StdDraw.filledSquare(x, y, 0.02);
            }
        else{
            StdDraw.filledSquare(x, y, 0.02); //if not touched, keep it.
            }
        }

       rx = rx + vx; 
       ry = ry + vy;

       StdDraw.filledCircle(rx, ry, radius); 
            // display and pause for 20 ms
        StdDraw.show(20); 
        }
    }  
}
公共类弹跳球{
公共静态void main(字符串[]args){
如果(参数长度<1){
System.out.println(“用法:javabouncingball N”);
系统出口(0);
}
int N=Integer.parseInt(args[0]);
如果(N>2500){

println(“用法:javabouncingball N假设用户输入-1表示N,那么x和y不会得到值,因为循环体不会运行

简单解决方法:为x和y指定默认值(例如0)


您需要同时初始化
x
y

double x = 0;
double y = 0;
发生
ArrayIndexOutOfBoundsException
,因为您只将数组定义为50x50

double[]myArray=新的double[50][50]

然而,使用
t
访问大于该索引的索引:

x = myArray[t][j]; 

你必须初始化你的局部变量,局部变量得不到默认值

   int double x=0.0;
   int double y=0.0;
将解决编译器错误

if N>50
  for   (int  t=0;t <50;t++){ 
                for   (int   j=0;j <50;j++){ 
                      myArray[t][j]= x; // ArrayIndexOutOfBound Exection occurs here 
                      myArray[j][t]= y; 
                } 
            } 
如果N>50

对于(int t=0;t)什么行会导致错误?请显示错误消息的完整文本。能否包含整个编译器错误。同样,为什么不向我们显示错误消息的文本?我更改了它,但仍然不起作用。这次它在line@jzhong5你能把stacktrace贴出来吗我们一直向@jzhong询问错误消息,但出于某种原因,他一直拒绝显示这些消息。@jzhong5气垫船的意思是一个正确的编译错误或异常消息,它给出了问题的详细解释、行号等。如果您仔细阅读这些消息,您将获得解决问题所需的所有信息你自己解释。@jzhong:你在解释错误,并没有像编译器给你的那样向我们显示消息本身。如果你不这样做,你就让我们猜测错误是什么,这不是一件好事。特别是因为你解释错了。谢谢,但这给了我另一个关于x行BoundIndex的问题=myArray[t][j];@jzhong5我想原因是N>=50(t循环从0到N).你是对的。我修改了它。但是。在这个例子中,我想要的是将点从0,0存储到50,50,这样总共有2500个点…我该怎么办?我想我使用二维数组的方式是错误的。将t从0循环到50,你将得到2500个点-我不确定我是否理解你的要求。@jzhong5,因为你最初的问题是现在解决了,我建议您花一点时间使用调试器,尝试了解哪些地方没有按预期工作。非常感谢。但是,在这个示例中,我想要的是存储0,0到50,50的点,因此总共有2500个点…我应该怎么做?我猜我使用二维数组的方式是错误的。现在,如果我得到n>50,它会给我带来错误bound@jzhong5显然,如果n>50,它会抛出绑定异常,因为数组的大小为50
if N>50
  for   (int  t=0;t <50;t++){ 
                for   (int   j=0;j <50;j++){ 
                      myArray[t][j]= x; // ArrayIndexOutOfBound Exection occurs here 
                      myArray[j][t]= y; 
                } 
            }