【问题标题】:Print formatting while taking user input在接受用户输入时打印格式
【发布时间】:2013-01-29 03:38:22
【问题描述】:

我有一个大学作业,我需要打印出五金店出售的物品,从用户那里获取输入,对该输入进行一些计算,然后打印出发票。

我已经能够成功打印出五金店出售的物品,但是在使用输入的while 循环时遇到了问题。

程序要求用户输入一个代码,然后要求输入相应的数量。这在循环的第一次迭代中运行良好,但在第二次迭代中,用户提示“CODE:”和“QUANTITY:”出现在同一行,尽管我在提示用户时使用了println

非常感谢适合编程新手的详细回复。

代码如下:

 import java.util.Scanner;

 class HardwareStore {


    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);


        System.out.println("WELCOME TO THE HARDWARE STORE!");
        System.out.println("----------------------------------------------------------------------");


        String sticky = "G22";
        String keyring = "K13";
        String screwy = "S21";
        String padlock = "I30";


        int stickyprice = 10989;
        int keyringprice = 5655;
        int screwyprice = 1099;
        int padlockprice = 4005;


        System.out.println("CODE\t\tDESCRIPTION\t\t\t\t\tPRICE");
        System.out.println("----\t\t-----------\t\t\t\t\t-----");

        System.out.println(sticky + "\t\tSTICKY Construction Glue, Heavy Duty, \n\t\t7oz, 12 Pack \t\t\t\t\t$" + stickyprice);
        System.out.println(keyring + "\t\tCAR-LO Key Ring, Quick Release, \n\t\t1 Pack\t\t\t\t\t\t$ " + keyringprice);
        System.out.println(screwy + "\t\t!GREAT DEAL! SCREW-DUP Screwy Screws, \n\t\tDry Wall Screws, 3 in. Long, 50 Pack\t\t$ " + screwyprice);
        System.out.println(padlock + "\t\tLET-IT-RAIN, Weather Proof Padlock, \n\t\tPortable, One Push Functionality\t\t$ " + padlockprice);
        System.out.println("----------------------------------------------------------------------");


        int i = 10000; 
        String [] usercode = new String[i]; 
        int [] userquantity = new int[i];


        System.out.println("PLEASE ENTER YOUR ORDER:");


        while (true) {
            System.out.println("CODE: (X to terminate)");
            usercode[i] = in.nextLine();

            if (usercode[i].equalsIgnoreCase("x")) {
                break;
            }

            System.out.println("QUANTITY: ");
            userquantity[i] = in.nextInt();
        } 
    }
}

【问题讨论】:

  • 另外,请随意编辑其余代码,并为我提供有关如何继续执行该程序的提示。或者我有哪些可以改进的方法。
  • 您应该接受对上一个问题的回答。
  • 我该怎么做?我确实单击“是”来“这篇文章对您有帮助吗?”答案之一。如果那是我必须做的,我会再做一次。也许我上次没有做对。
  • 非常感谢。我想通了并接受了一个。对不起,我在这里很新。我相信你们和我这样的菜鸟打交道会很烦人,但我会尽快学习如何更好地使用这个网站。
  • @nickecarlo 我们曾经都是菜鸟。不用担心。见鬼,我还是。

标签: java arrays input


【解决方案1】:

当您输入QUANTITY 时,您正在按回车键。 newline 字符不被 in.nextInt(); 使用,它保留在扫描仪缓冲区中,直到您再次滚动到 in.nextLine()

此时in.nextLine() 会一直读取,直到找到一个换行符,而该换行符恰好是缓冲区中的下一个换行符。所以它再次直接跳到QUANTITY

【讨论】:

  • 如果您需要更多解释,请随时在此处评论 nick。我会用更多信息更新我的答案。
  • 谢谢。会添加一个 in.nextLine();在这里解决问题?还是我完全不在乎这个。
  • @nickecarlo 是的,在这种情况下它会。它将消耗\n 用于下一个循环。不过,这并不总是最佳实践。我不记得 Java 是否像 C++ 那样允许在命令行中使用空格分隔输入。如果是这种情况,in.nextLine() 会导致问题,例如,如果您输入“STICKY (SPACE) 3”
  • 好的,测试过了,它似乎奏效了。感谢您的帮助,这本书不谈论它很奇怪。当我对这个程序进行更多工作并需要帮助时,我会发布更多内容,我应该编辑同一篇文章,因为它与这个程序相关,还是创建一个新的?
  • @nickecarlo 查看我在上一条评论中所做的编辑。我会说打开另一个问题,除非它是在同一个主题上(从命令行读取的问题)
猜你喜欢
  • 1970-01-01
  • 2015-11-28
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 2013-03-31
相关资源
最近更新 更多