【问题标题】:Java console input doesn't work as intendedJava 控制台输入无法按预期工作
【发布时间】:2017-01-12 14:05:22
【问题描述】:

所以我写了一个程序,如果你输入书名,它会打印关于一本书的信息,如果你直接输入标题作为这样的字符串,它工作得很好:

bs.getBook("book");

但我希望它从这样的控制台输入中读取标题:

String inputResult = System.console().readLine();
bs.getBook(inputResult);

但由于某种原因它不起作用。如果我只是尝试打印输入,它会打印我输入的字符串,因此它实际上也应该与 getBook 一起使用,但它没有。我错过了什么吗?

这就是getBook方法:

public void getBook(String title) {
        for (int i = 0; i < books.length; i++) {
            if (books[i].title == title) {
                System.out.println(books[i]);
        } else {
            System.out.println("0");
            }
        }
    }

所以这里有一个例子: 如果我这样输入书名:

bs.getBook("book");

它在控制台中打印出它应该这样做的信息:

Book(book, 8494030, 22.1)

但如果我尝试使用以下命令在命令行中输入标题:

String inputResult = System.console().readLine();
bs.getBook(inputResult);

它不起作用。如果我尝试打印我输入的内容:

System.out.println(inputResult);

它会打印我输入的内容,为什么它在 getBook 方法中不能正常工作?

【问题讨论】:

  • 可能是的,你错过了一些东西。但是我们不能确定没有minimal reproducible example
  • 你使用的是eclipse还是其他IDE?
  • @KiraKumar 我不确定,我猜不是。
  • 您将 String 与 == 进行比较,而不是 equals

标签: java string input console


【解决方案1】:

我不认为您的扫描仪/阅读器是这里的问题。 在您的 getBook 方法中,尝试将标题与等号进行比较

if (books[i].title.equals(title)) {

我假设您的 .title 方法返回一个带有书名的字符串,如果您将其称为 getTitle 会更容易理解


你可以尝试使用缓冲阅读器

    InputStream is = System.in;
    BufferedReader in = new BufferedReader(new InputStreamReader(is));

    System.out.println("Enter Book Title: ");
    String input = "";

    try {
        input = in.readLine();
        System.out.println("Your Input: " + input);

        is.close();
        in.close();
    } catch (IOException e) {
        System.out.println("Error reading input");
    }

【讨论】:

  • 最后,谢谢。有效。不,它不返回书名,而是返回有关图书的信息(书名、ISBN、价格)。但是,当我直接将标题作为字符串输入时,为什么它可以使用 == 而不是 .equals
  • 我不确定 == 和 equals 之间的区别,但据我所知,equals 比较了逻辑上的字符串。 == 比较变量的引用
【解决方案2】:

尝试从命令行使用 Scanner 获取值

System.out.println("Enter your book name: ");
Scanner scanner = new Scanner(System.in);
String bookName= scanner.nextLine();
System.out.println("Your book name is " + bookName);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-15
    • 2023-03-24
    • 1970-01-01
    • 2021-01-18
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    相关资源
    最近更新 更多