Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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 把矩形分成正方形_Java_Hashmap_Grid_Coordinates - Fatal编程技术网

Java 把矩形分成正方形

Java 把矩形分成正方形,java,hashmap,grid,coordinates,Java,Hashmap,Grid,Coordinates,我有一个坐标为a,B,C,D的矩形,它们分别有坐标: A->(3,9) B->(6,9) C->(6,6) D->(3,6) 其中A为左上坐标,D为左下坐标 我想把矩形分成25个网格,并给每个网格分配一个数字 所以我试着 double width = 6-3=3; double height = 9-6=3; grid width=3/5=0.6 grid height=3/5=0.6 现在我想给网格分配一个id和它们的坐标 1 -> (3,9),(3.

我有一个坐标为a,B,C,D的矩形,它们分别有坐标:

A->(3,9)
B->(6,9)
C->(6,6)
D->(3,6)
其中A为左上坐标,D为左下坐标

我想把矩形分成25个网格,并给每个网格分配一个数字

所以我试着

double width =  6-3=3;
double height = 9-6=3;

grid width=3/5=0.6
grid height=3/5=0.6
现在我想给网格分配一个id和它们的坐标

1  ->  (3,9),(3.6,9),(3.6,8.4),(3,8.4)
等等

所以我实现了一个散列映射来存储信息

HashMap<Integer, Double[]> hmap = new HashMap<Integer, Double[]>();
HashMap hmap=newhashmap();
但是我很困惑如何才能得到网格id和


非常感谢您的帮助。

表示网格数据结构的最简单方法是使用网格所包含的二维数据类型数组,您可以声明一个类似的数组

Double[][] grid = new Double[5][5]
这基本上是一个数组的数组5个数组的数组5个或更多简单地说是5行5列。当您以这种方式构造数据时,可以很容易地在该网格中找到特定的正方形,并更新/查看它们,或者迭代整个网格中的每个正方形、每行、每列等。迭代二维数组的方法是使用两个嵌套循环。外部表示您拥有的行数,内部表示每行的记录或数据数,例如,对于上面的网格,您可以拥有

for(int i = 0; i < 5; i++){
    for(int j = 0; j < 5; j++){
        System.out.println(grid[i][j].toString());
    }
}
for(int i=0;i<5;i++){
对于(int j=0;j<5;j++){
System.out.println(grid[i][j].toString());
}
}

上面的代码命中每个方块,并在网格中打印该方块数据的内容。例如,如果你想从2d切换到3d,你会有3个嵌套的for,一个做一行,另一个做一个正方形得到一个平面,另一个做z得到深度,然后你会有一个易于访问和迭代的三维数据结构。我刚刚用一个2d的JButton数组完成了一场国际象棋游戏,如果您还有任何问题,请告诉我。

您可以通过简单的双循环生成ID和(36)坐标:

public static void main(String[] args) {

    Map<Integer, double[]> hmap = new HashMap<>();

    int id = 0;
    for (double height = 9.0 ; height >= 6.0; height -=0.6) {

        for (double width = 3.0 ; width <= 6.0; width+=0.6) {

            hmap.put(id++, new double[] {width, height}) ;
        }
    }

    //output 
    for(Integer iD : hmap.keySet()) {

        System.out.printf("%2d  %3.2f %s %3.2f \n",iD,hmap.get(iD)[0],"-",hmap.get(iD)[1]);
    }
}
publicstaticvoidmain(字符串[]args){
Map hmap=newhashmap();
int id=0;
对于(双倍高度=9.0;高度>=6.0;高度-=0.6){

对于(double width=3.0;width Why
double[]
,而不是
double[]
?还有,到目前为止您尝试了哪些代码?使用
x
y
坐标定义一个
。然后确保您的
整数
(网格id)映射到
列表
,并测试此
资产真(List.size()=4)
,考虑到四边形网格。包括角点(如您的问题
(3,9)、(3.6,9)、(3.6,8.4)、(3,8.4)…
)它是一个6x6网格是的,正如您所说,二维数组易于维护,代码正在访问网格,但我的问题是当我访问网格时,如何获取网格的坐标?使用
double[]
而不是
Double[]
并在其中存储Double(坐标),而不是
int
@Josh以获得可以直接引用i和j的坐标,例如,如果您想找到大于100的所有正方形的坐标(任意条件)你可以使用上面的嵌套循环并记录所有满足条件的i和j,然后你可以用i和j做任何你想做的事情,我建议你制作一个坐标对象,并根据你的需要制作一个它们的数组列表。你上面的代码生成id,但我在对坐标进行分组时遇到了一些麻烦。例如
1->(3,9),(3.6,9),(3.6,8.4),(3,8.4)
同样,我想为每个网格id配对。你能帮我吗?我不确定我是否了解你需要什么。难道
HashMap
没有为每个id配对吗?HashMap给出了各个点和坐标,但我现在正计划按照我需要的意义对它们进行分组,(3.6,8.4),(3,8.4)
而不是
1->(3,9)
。因此,基本上我想对构成网格解决方案的各个点进行分组,因为它可能非常简单,但我认为这是一个不同的问题,应该单独发布。如果需要,请在此处发布消息。。