gpt4 book ai didi

Java 多重扫描器

转载 作者:行者123 更新时间:2023-12-01 19:46:10 24 4
gpt4 key购买 nike

我有一个类,它创建多个 Integer 对象并将它们放入 LinkedList 中,如下所示:

public class Shares<E> implements Queue<E> {
protected LinkedList<E> L;

public Shares() {
L = new LinkedList<E>();
}

public boolean add(E price) {
System.out.println("How many of these shares would you like?");
Scanner scanInt;
scanInt = new Scanner(System.in);
Integer noShares = scanInt.nextInt();
for (int i = 0; i < noShares; i++) {
L.addLast(price);
}
scanInt.close();

return true;
}
}

我有一个应用程序,它从控制台扫描输入“add”,如果找到,则调用方法add,如下所示:

public class Application {
private static Scanner scan;

public static <E> void main(String[] args) {
Queue<Integer> S = new Shares<Integer>();
scan = new Scanner(System.in);
System.out.println("Please type add");
String sentence = scan.nextLine();
while (sentence.equals("quit") == false) {
if (sentence.equals("add")) {

System.out
.println("What price would you like to buy your shares at?");

S.add((Integer) scan.nextInt());

} else
System.exit(0);

sentence = scan.nextLine();
}
}
}

应用程序应允许用户根据需要多次输入“add”,但在调用 add 方法后会出现错误“未找到行”。

我猜测这是因为该方法中的 Scanner 尚未关闭并在需要时重新打开。这是程序的问题吗?如果是,我该如何修复它?

请注意,该程序尚未完成,因为我将添加一种出售这些股票的出售方法。这就是我使用 while 循环的原因。

最佳答案

对任何流使用多个包装器都是让自己感到困惑的好方法。我建议您只包装一次流,除非您真的知道自己在做什么。

最简单的方法是在这种情况下使用单例,因为它包装了另一个单例(最好的方法是将扫描器作为参数传递)

public class Application { 
// use this Scanner in all you other code, don't create another one.
static final Scanner scan = new Scanner(System.in);

public static <E> void main(String[] args) {

Im guessing this is because the scanner in the method has not been closed

一旦关闭流,它就会关闭底层流,并且您无法再次使用它。仅当您想防止再次使用 System.in 时才将其关闭。

how would I go about fixing it?

最好的解决方案是让所有扫描仪在一个地方、一种方法或一个类中使用。您让 main() 完成与用户的所有交互并将值传递到您的数据结构。让对象自行初始化是一种不好的做法,如果你开始这样做,它会在你余下的开发日子里困扰你;)(说真的,你会看到这一次又一次地完成,这通常是一场噩梦)

<小时/>

顺便说一句,永远不要在没有解释的情况下退出程序。调用 System.exit(0); 甚至没有错误消息也是一场噩梦。我曾经参与过一个项目,该项目有 260 次 System.exit() 调用,通常没有错误消息,您可以想象诊断服务器无缘无故停止是多么有趣。

关于Java 多重扫描器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59121995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com