我正在试着写一个程序,可以识别哪个送货司机有最低的当前送货负荷。
司机的姓名,位置和当前的交货量是这样的格式:
Wesley Smith, London, 4
Mark Hammond, London, 2
Abul Ali, London, 12
Ned Cayhill, London, 6
我试图写一个程序,可以识别马克哈蒙德(在这个例子中)有最低的负载,然后整个字符串将被分配给一个新的变量。
我试过从所有字符串中取出最后一个字符(当前交付负载)并比较它们,但随后我失去了将该数字重新连接回其原始驱动程序的方法。
这是我写的代码到目前为止(编辑)
ArrayList<String> matchedDrivers = new ArrayList<String>();
ArrayList<Integer> deliveries = new ArrayList<String>();
matchedDrivers.add("Wesley Smith, London, 4");
matchedDrivers.add("Mark Hammond, London, 2");
matchedDrivers.add("Abul Ali, London, 12");
matchedDrivers.add("Ned Cayhill, London, 6");
for(int i = 0;i<matchedDrivers.size();i++)
{
String mDriver = matchedDrivers.get(i);
String load = mDriver.substring(mDriver.lastIndexOf(",") + 1);
int intLoad = Integer.parseInt(load)
deliveries.add(intLoad);
}
Integer max = Collections.max(deliveries);
System.out.println(max);
提前感谢!
您可以遍历整个列表,并保留一个变量来跟踪遇到的最小值,并保留一个变量名来跟踪具有最小值的人。
要从列表中提取最小值,可以使用String类的split函数,然后使用integer . parseint
获得整数值class Main {
public static void main(String args[]) {
List<String> r = new ArrayList<>();
r.add("Wesley Smith, London, 4");
r.add("Mark Hammond, London, 2");
r.add("Abul Ali, London,12");
String driver = findLowestLoad(r);
System.out.println(driver);
}
private static String findLowestLoad(List<String> r) {
int min = Integer.MAX_VALUE;
String name = "";
for (int i = 0; i < r.size(); i++) {
int delValue = Integer.parseInt(r.get(i).split(",")[2].trim());
if (delValue < min) {
min = delValue;
name = r.get(i).split(",")[0];
}
}
return name;
}
}
,输出为
Mark Hammond
一个想法¹是创建一个简单的类(或记录类)来保存信息:
record DeliveryDriver(
String name,
String location,
int load
) {
// empty
}
然后一些代码将一个输入行转换为该类的实例:
DeliveryDriver createDriver(String line) {
String[] fields = line.split("\h*,\h*", -1);
String name = fields[0];
String location = fields[1];
int load = Integer.parseInt(fields[2]);
return new DeliveryDriver(name, location, load);
}
现在您可以读取每行,创建驱动程序并将其添加到列表中(此处未发布)。
一旦你有了List<DeliveryDriver>
,你可以遍历它并找到想要的:
DeliveryDriver findDriver(List<DeliveryDriver> drivers) {
DeliveryDriver best = null;
for (DeliveryDriver driver : drivers) {
if (best == null || driver.load() < best.load()) {
best = driver;
}
}
return best;
}
前面的方法可以使用Java 8流API在一个表达式中编写:
drivers
.stream()
.sorted(Comparator.comparingInt(DeliveryDriver::load))
.findFirst()
.orElse(null);`
一旦你得到了驱动程序DeliveryDriver driver = findDriver(drivers);
你就有了它的所有信息:String name = driver.name();
或int load = driver.load();
<子>1-这里张贴的代码是为了显示基本思想,它缺少断言,参数测试,…不是意味着是完整的,而不是编译错误免费!子>