如何识别一组字符串中最小的数字?



我正在试着写一个程序,可以识别哪个送货司机有最低的当前送货负荷。

司机的姓名,位置和当前的交货量是这样的格式:

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-这里张贴的代码是为了显示基本思想,它缺少断言,参数测试,…不是意味着是完整的,而不是编译错误免费!

相关内容

  • 没有找到相关文章