import java.time.LocalDate;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;
class ProcessDeliveryOrders {
public static DeliveryOrder findFirstOrder(List<DeliveryOrder> orders) {
return new DeliveryOrder(); // Breakpoint.
// write your code here
}
public static void printAddressesToDeliver(List<DeliveryOrder> orders) {
System.out.println(); // Breakpoint.
// write your code here
}
public static void main(String[] args) {
final Scanner scanner = new Scanner(System.in);
List<DeliveryOrder> orders = Stream.iterate(1, i -> scanner.hasNextLine(), i -> i + 1)
.map(i -> scanner.nextLine().split("\\|"))
.map(parts -> new DeliveryOrder(
Long.parseLong(parts[0]), parts[2], LocalDate.parse(parts[1])))
.collect(Collectors.toList());
System.out.println(findFirstOrder(orders)); // Breakpoint.
printAddressesToDeliver(orders);
}
}
class DeliveryOrder {
private final long orderId;
private final String address;
private final LocalDate deliveryDate;
// there are even more fields: customer name, phone, products info, etc
public DeliveryOrder() {
this.orderId = -1;
this.address = "No address";
this.deliveryDate = LocalDate.MIN;
}
public DeliveryOrder(long orderId, String address, LocalDate deliveryDate) {
this.orderId = orderId;
this.address = address;
this.deliveryDate = deliveryDate;
}
public static Comparator<DeliveryOrder> getComparatorByDeliveryDate() {
return Comparator.comparing(DeliveryOrder::getDeliveryDate);
}
public long getOrderId() {
return orderId;
}
public String getAddress() {
return address;
}
public LocalDate getDeliveryDate() {
return deliveryDate;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
DeliveryOrder that = (DeliveryOrder) o;
return address.equals(that.address) &&
deliveryDate.equals(that.deliveryDate);
}
@Override
public int hashCode() {
return Objects.hash(address, deliveryDate);
}
@Override
public String toString() {
return orderId + "|" + deliveryDate + "|" + address;
}
}
这是一项学习任务。
要运行它,我在控制台中输入以下内容:
样品输入:
1|2021-09-03|112 Mammoth Street, Colorado Springs, CO 80911
2|2021-09-05|369 Woodside Court, Troy, NY 12180
3|2021-09-02|837 Bowman Street, Helena, MT 59601
4|2021-09-03|112 Mammoth Street, Colorado Springs, CO 80911
问题
调试器永远不会到达代码中标记的三个断点中的任何一个。如果不在每个断点上停下来,我就无法理解任务并继续下去。
你能帮助我理解:
1.为什么调试器永远不会到达这些断点中的任何一个?
1.如何科普这一问题?
1条答案
按热度按时间6jjcrrmo1#
这不是答案,而是:
(我会收回“不是答案”的部分,这可能是一个答案。重复我的评论:)
(The我在这里用来调试代码的
StringReader
关闭了Scanner
的输入。System.in
实际上从未关闭。因此,您实际上永远不会到达读取输入的部分之后的代码。你可以试试这个版本,它会帮助你达到这些语句。可能有帮助的是你的输入可能有问题。键入所有你有什么是相当复杂的,可能容易出错。
如果你在程序中使用一个字符串作为输入,它对你和我们都是可复制的。然后我们都可以放心,我们看到了代码中的相同问题。
例如,在代码中添加一些测试向量:
为了做到这一点,我从字面上复制了你在你的问题中的字符串,并将它们粘贴在字符串文字
""
的引号之间。然后在程序中使用该字符串作为“输入”:
现在,您的代码对每个人都以完全相同的方式工作,我们都可以调试完全相同的问题。