【问题标题】:Create an object by receiving a 2d coordinates array通过接收二维坐标数组创建对象
【发布时间】:2017-11-25 17:54:34
【问题描述】:

您好,我的问题如下,我收到了一个二维矩阵,我已经创建了一个名为 City 的类,它将保存 x 和 y 的位置坐标,这些值将像这样用逗号分隔

0,0
0,20
4,3
6,2
7,21

for (int k = 0; k < size; k++){                             
String valuesStrArr2[] = s.nextLine().split(",");       
for (int l = 0; l < 2; l++){                            
    int coord = Integer.parseInt(valuesStrArr2[l]);     
    System.out.println("cordinatesss:" + coord);        
    City city = new City(coord,coord);                  
    TourManager.addCity(city);                          
    }                                                       
}

所以“坐标”是数组的值,当我打印它时,它具有正确的值,但是当我创建城市时它会重复值,我该如何解决这个问题?我知道这是一个愚蠢的问题,但我被困在这里。

我的构造函数

// Constructs a city at chosen x, y location
public City(int x, int y){
    this.x = x;
    this.y = y;
}                                                        

【问题讨论】:

  • 为什么你的 City 构造函数接受两个相同的参数?这真的没有意义:新城市(坐标,坐标)
  • 不相同,一个用于 x,一个用于 y // 在选定的 x, y 位置构造一个城市 public City(int x, int y){ this.x = x;这个.y = y; }

标签: java arrays matrix


【解决方案1】:

@Glen 一针见血。在您的第二个 for 循环中,您在第一次(2 次)迭代中填充 coord 整数变量,然后将该值提供给 x 和 y 的 City 在同一迭代中。你在第二次迭代中做同样的事情。通过这样做,您实际上供应的城市数量是应有数量的两倍。

由于您的 2D 数组的列数很少,因此您确实不需要内部 for 循环。你可以用一个循环完成整个事情,而且它很可能更具可读性:

for (int k = 0; k < size; k++) {
    String valuesStrArr2[] = s.nextLine().split(",");
    int coord1 = Integer.parseInt(valuesStrArr2[0]); 
    int coord2 = Integer.parseInt(valuesStrArr2[1]); 
    City city = new City(coord1, coord2);
    TourManager.addCity(city);
}

【讨论】:

  • 哎呀......格伦也打败了我 :)
【解决方案2】:

当您调用new City(coord,coord) 时,您似乎认为coord 将在同一时间点有两个不同的值。该变量在该点只有一个值,即Integer.parseInt(valuesStrArr2[l]) 这会导致您有重复的城市,一个具有正确的 x 坐标,一个具有正确的 y 坐标。

要解决此问题,请尝试以下操作: 注意:此代码对您不起作用,因为我没有考虑高于 9 的坐标值(此代码仅在所有值都是 1 位值时才有效)向您展示这是为了帮助您自己找到答案

String coordinates = "0, 0, 0, 20, 4, 3, 6, 2, 7, 21";

for (int k = 0; k < size; k += 2){ //This is to get every other value from the coordinates
        int x = Integer.parseInt(coordinates.charAt(k));
        int y = Integer.parseInt(coordinates.charAt(k+1));
        System.out.println("cordinatesss:" + x + ", " + y);
        City city = new City(x, y);
        TourManager.addCity(city);                                                    
}

【讨论】:

    猜你喜欢
    • 2020-05-15
    • 2010-12-17
    • 2022-01-17
    • 1970-01-01
    • 2011-08-19
    • 2021-06-16
    相关资源
    最近更新 更多