无法在Java中初始化二维数组

时间:2014-07-30 16:48:46

标签: java arrays for-loop multidimensional-array

我试图将鼠标的X轴位置和鼠标的Y轴位置分别存储在二维数组中,稍后使用它但会出错。 我是数组的新手,我正在尝试使用for循环和实例变量/全局变量初始化一个二维数组。我得到的错误说"数组常量只能用于初始化器"。我查看了文档并更改了代码但没有得到解决方案。

我阅读以获得解决方案的问题和文件

我的代码:

package com.selenium;

import java.awt.*;

public class MouseAxis {
  int[][] mouseLocation ;
  int AxisX;
  int AxisY;

public void getAxisXAndY(int x, int y){
    AxisX=x;
    AxisY=y;
} // getAxisXAndY

public void mouseAxisPosition() throws AWTException{
    int x , y;
    PointerInfo pointer = MouseInfo.getPointerInfo();
    Point point = pointer.getLocation();
    x=(int)point.getX();
    y=(int)point.getY();
    getAxisXAndY(x,y);
} // mouseAxisPosition

public void storeMouseLocation(){
 for(int i=0; i<=20; i++){
      for(int j=i; j<=1; j++){
        int[][] temp = new int[j][i];
        temp[j][i]={AxisX,AxisY} ;
        mouseLocation[j][i]=temp[j][i];
        Thread.sleep(4000);
        mouseAxisPosition();
      } // for_2
  } // for_1
 } // storeMouseLocation
} // MouseAxis

2 个答案:

答案 0 :(得分:1)

问题在于您尝试将数据存储在索引中。如果您想要一系列位置,那么您有几个选择:

拥有2个阵列

int lastLocation = 0;
int[] x = new int[10];
int[] y = new int[10];

PointerInfo pointer = MouseInfo.getPointerInfo();
Point point = pointer.getLocation();
x[lastLocation] = (int)point.getX();
y[lastLocation] = (int)point.getY();
lastLocation++;

给定索引i,您可以从数组中获取x和y值。

创建专门类型的数组

只需存储整个Point对象:

int lastLocation = 0;
Point[] points = new Point[10];
PointerInfo pointer = MouseInfo.getPointerInfo();
Point point = pointer.getLocation();
points[lastLocation] = point;
lastLocaiton++;

答案 1 :(得分:0)

在Java中,int[][]表示整数数组的引用数组。虽然有些语言有一个NxM整数数组的概念,但Java却没有;它最接近的将是一个N个引用的数组,它们独立地识别出不同的M项整数数组。

如果想让MouseLocation看起来识别NxM整数数组,首先必须初始化它以识别N个引用整数数组的数组,然后初始化每个元素该数组用于标识不同的M个整数数组。例如,要将其初始化为5x7,可以执行以下操作:

mouseLocation = new int[5][];
for (int i=0; i<5; i++)
  mouseLocation[i] = new int[7];

请注意,Java并未强制要求所有内部数组都是不同的,但如果不是这样,那么事情会表现得很奇怪。例如,如果有人说:

mouseLocation[2] = mouseLocation[3];

最初可能会出现从第3行复制到第2行的所有内容,但它也会产生另一种效果:mouseLocation[2]标识的阵列上的任何操作也将对{{1}标识的数组进行操作因为它们将是相同的数组

数组数组在Java中可能很棘手;在某些情况下,使用单个N * M元素阵列表示NxM网格可能更简单。访问代码可能不太直观(对[i,j]处的元素的访问将被写为mouseLocation[3])但是数组将表现为单个对象,而不是作为对象的一组引用一切都不同。