通过接收二维坐标数组创建一个对象

时间:2017-11-25 17:54:34

标签: java arrays matrix

您好我的问题如下,即时接收2d矩阵,我已经创建了一个名为City的类,它将保存x和y的位置坐标,这些值将以逗号分隔,如下所示

@using (@Html.BeginForm())
{
if (!IsPost)
{
    <div class="row">
        <div class="col-lg-2">
            <br />
            <br />
            @Html.LabelFor(m => m.Group_Name)
            @Html.DropDownList("groupList",
                (IEnumerable<SelectListItem>)
                ViewBag.ListItem, "Select Group",
                new { @id = "selectedGroup",
                    @class = "form-control" })
            <br />
            <br />
            <button class="btn btn-primary"
                    >Submit</button>
        </div>
        <div class="col-lg-2">
            <br />
            <br />
            <label id="lblAddNew" class="label-default">
            Add new group</label>
            <input type="radio" id="radioAddNew" class="radio-inline" />
            <br />
            <br />

            @Html.TextBoxFor(m => m.Group_Name, 
            new { @id = "txtBoxAddNewGroup" })

        </div>
    </div>
        @*<button class="btn btn-primary">Submit</button>*@
}

<div class="col-lg-2">


</div>
}
<script type="text/javascript">
$(document).ready(function () {
    $("#txtBoxAddNewGroup").hide();
    $("#radioAddNew").click(function () {
        if (this.checked == true) {
            $("txtBoxAddNewGroup").show();
        }
        else {
            $("txtBoxAddNewGroup").hide();
        }
    });
});
</script>

所以&#34; coord&#34;是数组的值,当我打印它时,它具有正确的值但是当我创建它复制值的城市时,我该如何解决这个问题呢?我知道这是一个愚蠢的问题但是我被困在这里。

我的构造函数

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

2 个答案:

答案 0 :(得分: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);                                                    
}

答案 1 :(得分:0)

@Glen打了钉子。在第二个 for 循环中,在第一个(2个)迭代中填充 coord 整数变量,然后将该值提供给 x 和<在同一次迭代中,城市的强> y 。你在第二次迭代中做同样的事情。实际上,你实际上提供的城市数量是你应该的两倍。

由于您的2D数组具有如此少的列,因此您实际上不需要内部用于循环。你可以用一个循环完成整个过程,它很可能更具可读性:

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