2017-11-25 51 views
-2

您好,我的问题是以下内容,即时接收一个2d矩阵,我已经创建了一个名为City的类,它将保存x和y的位置坐标值将以逗号分隔这样通过接收2d坐标数组创建一个对象

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; 
}               
+0

为什么你的City构造函数接受两个相同的参数?这真的没有意义:新城市(坐标,坐标) –

+0

10不一样,一个是x和y的一个 //在选定的x,y位置构建一个城市 public City(int x,int y) {this.width =“_8;'; this.y = y; } –

回答

0

@Glen打在它的指甲上。在你的第二个循环您填写第一(2)迭代坐标整型变量,然后提供该值都Xÿ在同样的迭代。你在第二次迭代中做同样的事情。实际上,你提供的城市数量是你应该这样做的两倍。

由于你的二维阵列有这么几列,你真的不需要内部循环。你可以用一个循环完成整个事情,它很可能会更具可读性:

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); 
} 
+0

哎呀......格伦也打败了我:) – DevilsHnd

0

你似乎是的印象是coord将有时间在同一地点两个不同的值,当你调用new City(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);              
}