【问题标题】:Java skipping over a print statement scanner, specificJava跳过打印语句扫描器,具体
【发布时间】:2019-01-23 08:08:01
【问题描述】:

所以我的问题是我想要求输入以使用扫描仪,但它根本不打印出来。当它显示跳过的扫描仪的值Scanner cheeseType = new Scanner(System.in); 时,我得到了 null。

package classesProject;

import java.util.Scanner;

class Pizza {

    String size;
    String cheese;
    int numToppings;
    double price = 0;

}
public class pizzaTime {

    public static void main(String[] args) {

        Pizza order1 = new Pizza();

        double priceOfSize = 0;
        double priceOfCheese = 0;
        double priceOfToppings = 0;

        System.out.println("Pizza size small, medium or large: ");
        Scanner sizeAsker = new Scanner(System.in);
        order1.size = sizeAsker.nextLine();

        if(order1.size == "small") {
            priceOfSize = 3.0;

        } else if(order1.size == "medium") {
            priceOfSize = 5.0;

        } else if(order1.size == "large") {
            priceOfSize = 7.0;

        System.out.println("Cheese type: normal, xtra, or thic: ");
        Scanner cheeseType = new Scanner(System.in);
        order1.cheese = cheeseType.nextLine();

        }if(order1.cheese == "normal") {
            priceOfCheese = 0.0;

        } else if(order1.cheese == "xtra") {
            priceOfCheese = 0.5;

        } else if(order1.cheese == "thic") {
            priceOfCheese = 1.0;

        }

        System.out.println("Number of toppings: ");
        Scanner toppingAsker = new Scanner(System.in);
        order1.numToppings = toppingAsker.nextInt();

        priceOfToppings = order1.numToppings * 0.25;

        double orderTotalPrice = priceOfSize + priceOfCheese;

        System.out.println("Pizza size: " + order1.size + "\n"
                + "Cheese type: " + order1.cheese + "\n"
                + "Number of toppings: " + order1.numToppings + "\n"
                + "Order total: " + orderTotalPrice
                );

    }

}

被跳过的是:

System.out.println("Cheese type: normal, xtra, or thic: ");
Scanner cheeseType = new Scanner(System.in);
order1.cheese = cheeseType.nextLine();

运行时,控制台显示:

Pizza size small, medium or large: 
small
Number of toppings: 
2
Pizza size: small
Cheese type: null
Number of toppings: 2
Order total: 0.0

如您所见,它直接从披萨大小扫描仪跳转到浇头数量扫描仪,而不是按顺序进行。 我不知道为什么,或者我应该做些什么来解决这个问题。

【问题讨论】:

  • 不完全确定,但您的代码中存在非常基本的错误,其影响可能比您想象的要大:(order1.cheese == "normal") 这不是比较的正确方法字符串,或任何对象。使用equals方法
  • 考虑在任何地方都使用Scanner 的同一个实例,不要每次都创建新实例。

标签: java output java.util.scanner


【解决方案1】:

由于您在下一个问题后关闭括号,因此仅在大比萨饼时询问此问题

else if(order1.size == "large") {
        priceOfSize = 7.0;

    System.out.println("Cheese type: normal, xtra, or thic: ");
    Scanner cheeseType = new Scanner(System.in);
    order1.cheese = cheeseType.nextLine();

    }

如果您要在 priceOfSize = 7 之后放置一个右括号,则可以继续。不过,您仍然需要在别处修复丢失的支架。

【讨论】:

  • 这不是主要问题。代码编译,所以它运行。确定括号可能放错了位置,但对于某些值,它们应该得到正确的结果。主要问题是Objects的引用比较
  • @Stultuske 虽然您的陈述是正确的,但它并没有解决作者面临的问题。由于这个括号问题,他的声明没有达成。也许我应该添加大量关于他的代码存在的其他编码问题的 cmets。以后我会考虑的。
【解决方案2】:

在同一输入流上使用多个扫描仪不是一个好主意(在您的情况下为System.in)。在方法开始时只制作一个扫描仪:

Scanner scanner = new Scanner(System.in);
//read input with this here

scanner.close(); //also close it

编辑:Stefan 的答案是正确的,但这仍然是一个好主意。

【讨论】:

    猜你喜欢
    • 2013-10-17
    • 2013-05-14
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2015-10-26
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多