Hab*_*ata 1 java contains arraylist object
这是我的代码:
package bikeproject;
import java.util.ArrayList;
import java.util.Random;
public class BikerList {
public static void main(String[] args) {
ArrayList<Bike> bikes = new ArrayList<Bike>();
int mountainBikeSales = 0;
int roadBikeSales = 0;
fillArray(bikes);
displayStock(bikes);
// calculateStock(bikes);
System.out.println(displayBkeNumbers(bikes));
}
static void fillArray(ArrayList<Bike> bikes) {
Random rand = new Random();
// int number = 2;
// int a = rand.nextInt(2);
for (int i = 0; i < 10; i++) {
if (rand.nextInt(2) < 1) {
// System.out.println(rand.nextInt(2));
bikes.add(new MountainBike());
} else {
// System.out.println(rand.nextInt(2));
bikes.add(new RoadBike());
}
}
}
static void displayStock(ArrayList<Bike> bikes) {
for (Bike bike : bikes) {
System.out.println(bike);
}
}
static int calculateStock(ArrayList<Bike> bikes) {
int bikesSold = 0;
for (Bike bike : bikes) {
if (bikes.contains(new MountainBike())) {
bikesSold++;
}
}
return bikesSold;
}
static String displayBkeNumbers(ArrayList<Bike> bikes) {
int mb = 0;
int rb = 0;
mb = calculateStock(bikes);
rb = bikes.size() - mb;
return "\nStock Levels" + "\nWe have " + mb + " mountain Bike in Stock" + "\nWe have " + rb
+ " Road bikes in Stock";
}
}
Run Code Online (Sandbox Code Playgroud)
我真的相信该calculateStock()方法存在错误,因为它总是返回 false,在该calculateStock()方法中,bikesSold如果数组中的每辆自行车都是山地自行车的实例,我想将该值添加到变量中。
上面代码生成的输出:
Stock Levels
We have 0 mountain Bike in Stock
We have 10 Road bikes in Stock
Run Code Online (Sandbox Code Playgroud)
尽管山地自行车已经在ArrayList.
预期的输出,是这样的:
Stock Levels
We have 4 Mountain Bikes in stock
We have 6 Road Bikes in stock
Run Code Online (Sandbox Code Playgroud)
static int calculateStock(ArrayList<Bike> bikes) {
int bikesSold = 0;
for (Bike bike : bikes) {
if (bikes.contains(new MountainBike())) { //problematic line
bikesSold++;
}
}
return bikesSold;
}
Run Code Online (Sandbox Code Playgroud)
不起作用,因为.contains(Object o):
当且仅当此列表包含至少一个元素e 使得 Objects.equals(o, e)时才返回 true 。
因此,只要列表中至少有一个包含的实例(根据方法),它bikes.contains(new MountainBike())就会始终返回。trueMountainBike .equals(Object o)bikes
相反,您应该检查当前对象是否是您想要检查的特定类型的实例 ( MountainBike,在这种情况下),如下所示:
static int calculateStock(ArrayList<Bike> bikes) {
int bikesSold = 0;
for (Bike bike : bikes) {
if (bike instanceof MountainBike) {
bikesSold++;
}
}
return bikesSold;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |