在我的Java程序中,我正在模拟一个停车库。假设有一个随机数的汽车,假设是7.汽车编号1用值1表示,汽车2用值2表示,依此类推。每个汽车价值随机存储在代表停车场的阵列中。阵列的每个元素代表一个停车位。我正在尝试编写一个执行以下操作的方法:假设您想知道4号车位所在的停车位。值“4”传递给方法,该方法将在数组中搜索该值。我希望方法告诉我数组中哪个元素的值为“4”。这是我到目前为止的方法:
public int findBayOfCar(int carNumber)
{
int index = -1;
boolean found = false;
while (!found)
{
if (cars[index] == carNumber)
{
}
index++;
}
}
显然它不会起作用,因为Java无法将car [index](Car类型的数组)与carNumber(一个int)进行比较。我该怎么做才能纠正这个问题?
答案 0 :(得分:3)
这么小的代码中有很多错误。
while (!found)
这意味着您将继续搜索,直到找到某些内容,但如果我们搜索的元素不在数组上会发生什么?由于我们将尝试访问不存在的阵列单元,因此我们将获得臭名昭着的 ArrayOutOfBoundsException 。解决方案:for (int i = 0; i < cars.length; i++)
以便从开始运行直到数组的大小。found = true
并停止搜索。<强>代码:强>
public int findBayOfCar(int carNumber)
{
int foundAtBay = -1;
for (int i = 0; i < cars.length; i++)
{
if (cars[i].number == carNumber) // or whatever .Number or .number which identify the car number.
{
foundAtBay = i;
break;
}
}
return foundAtBay;
}
答案 1 :(得分:1)
您应该引用您的Car
对象来获取其编号:
public static int findBayOfCar(int carNumber, Car[] cars)
{
int index = -1;
boolean found = false;
while (!found && index < cars.length -1)
{
index++;
if (cars[index].getNumber() == carNumber)
{
found = true;
}
}
return found ? index : -1;
}
答案 2 :(得分:1)
一个简单而强力的解决方案是LinearSearch
:
for(int i=0; i < your_array_length; i++){
if(cars[i] == carNumber){
return i;
}
}
return -1; //-1 represents that the car was not parked in any of the slots
答案 3 :(得分:0)
如果你的车只是数字,那么:
int[] cars = new int[] { 1, 2, 3 } ;
public int indexOf(int carNumber) {
return Arrays.binarySearch(cars, carNumber);
}
如果你的车是字符串,那么
String[] cars = new String[] { "car1", "car2", "car2" };
public int indexOf(int carNumber) {
return Arrays.asList(cars).indexOf("car" + carNumber);
}
如果你的车是物体,那么
Car[] cars = new Car[] { new Car(), new Car(), new Car() };
public Car indexOf(int carNumber) {
return IntStream.range(0, cars.length).filter(c -> carNumber == cars[c].number).mapToObj(i -> cars[i]).findFirst().orElse(null);
}
或者,使用普通循环:
Car[] cars = new Car[] { new Car(), new Car(), new Car() };
public int indexOf(int carNumber) {
for (int i = 0; i < cars.length; i++) {
if (cars[i].number == carNumber) {
return i;
}
}
return -1;
}