嵌套While循环和嵌套if…else Java

嵌套While循环和嵌套if…else Java,java,while-loop,Java,While Loop,我的嵌套循环在工作时出现问题。 任务是要求用户输入他们想要购买的物品,然后询问他们想要多少。最终结果是当他们不再想要购买物品时,所选择的所有物品的总数 我想用数组代替嵌套的if…else语句来计算物品的价格,但我们还没有在课堂上学习数组 循环在输入1/2/3/4/5后暂停,但如果输入为00,则将成功终止 import java.util.Scanner; public class Shopping { public static void main(String[] arg

我的嵌套循环在工作时出现问题。 任务是要求用户输入他们想要购买的物品,然后询问他们想要多少。最终结果是当他们不再想要购买物品时,所选择的所有物品的总数


我想用数组代替嵌套的if…else语句来计算物品的价格,但我们还没有在课堂上学习数组

循环在输入1/2/3/4/5后暂停,但如果输入为00,则将成功终止

import java.util.Scanner;
public class Shopping {
     

    public static void main(String[] args){
 Scanner input = new Scanner(System.in);
 //initialize variables
double total = 0; // grand total of items and their amounts
double itemNum = 0;// corresponding item number
int itemAmount = 0;// quantity of item
double itemPrice =0; //price of selected itemNum



//offer user product menu
System.out.printf("The following items are available to purchase: %n"
        + "Item 1: $101.00%nItem 2: $119.25%nItem 3: $160.75%nItem 4: $203.00"
        + "%nItem 5: $109.12%n " );
System.out.printf("/////////////////%n%n");

//prompt user for item they want to buy
        System.out.println("Enter what item you want to purchase as 1, 2, 3, etc. OR "
        + "enter 00 to quit.");
         itemNum = input.nextDouble();
        while (itemNum != 00){
            if (itemNum == 1){
                itemPrice = 101.00;
            }
            else {
                if (itemNum ==2){
                    itemPrice = 119.25;
                }
                else {
                    if (itemNum ==3){
                        itemPrice = 160.75;
                    }
                    else {
                        if (itemNum ==4) {
                            itemPrice = 203.00;
                        }
                        else {
                            if(itemNum ==4){
                        itemPrice = 109.12;
                    }
                        else {
                                if (itemNum == 5){
                                itemPrice = 109.12;
                                }    
        }
              while (itemNum  <= 5){
        System.out.println("Enter how many of the item you want to purchase OR "
        + "enter 00 to quit.");
        itemAmount = input.nextInt();
        while (itemAmount != 00){
       {
        total = itemNum * itemAmount;
        }
        }
        }
                        }
                    }
                }
            }
        }
        if (itemNum == 00){
            System.out.printf("Your total for your items is: $%.2f%n", total);
    }
}
}
    ```
import java.util.Scanner;
公务舱购物{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
//初始化变量
double total=0;//项目及其金额的总计
double itemNum=0;//对应的项目编号
int itemAmount=0;//项目数量
double itemPrice=0;//所选itemNum的价格
//为用户提供产品菜单
System.out.printf(“以下项目可供购买:%n”
+“项目1:$101.00%nItem 2:$119.25%nItem 3:$160.75%nItem 4:$203.00”
+%nItem 5:$109.12%n”);
System.out.printf(“//%n%n”);
//提示用户购买他们想要购买的物品
System.out.println(“输入您想要购买的项目,如1、2、3等,或”
+“输入00退出。”);
itemNum=input.nextDouble();
while(itemNum!=00){
如果(itemNum==1){
分项价格=101.00;
}
否则{
如果(itemNum==2){
分项价格=119.25;
}
否则{
如果(itemNum==3){
分项价格=160.75;
}
否则{
如果(itemNum==4){
分项价格=203.00;
}
否则{
如果(itemNum==4){
分项价格=109.12;
}
否则{
如果(itemNum==5){
分项价格=109.12;
}    
}
while(itemNumOof,从何处开始

00不会做你认为它会做的事。
00
是一个八进制数,它…是与0完全相同的值。双精度不能表示用户只输入
0
00
之间的差异。事实上,如果用户输入
000.0000
,它最终仍然只是一个0。您的
==00
代码“有效”,但suggests一些不正确的内容。只需编写
==0
。如果希望循环在输入正好为
00
时结束,而不是在它是任何其他内容时结束,则不能调用
.nextDouble()
。调用
.next()
,请检查字符串输入,然后
Double.parseDouble
(一旦你确定它不是
00
),如果你必须的话,你就可以得到一个双人房间

此外,您要的号码是具体的。输入“我想要项目4.591824”毫无意义。那么您为什么要调用
.nextDouble()
?调用
.nextInt()

这是一个可怕的if/else格式。 您所做的只是将一个项目映射到一个价格。有很多更好的方法可以做到这一点:

// at the top level (as a sibling to your method defs):
private static final Map<Integer, Double> PRICES = Map.of(
    1, 101.00,
    2, 119.25,
    3, 160.75,
    4, 203.00,
    5, 109.12);

// later in a method
double price = PRICES.getOrDefault(itemNum, 0.0);
// price is now the price. or 0.0 if the item wasn't in there.
你的代码不可读,它已经把你搞砸了。 您的代码将检查itemNum是否为4,并将itemPrice设置为203.00。如果不是这样,它将检查itemNum是否为4,然后将price设置为109.12。这显然是令人眼花缭乱的,而且您的眼球可能没有看到这一明显的混乱,因为您制作了混乱的代码。这是混乱代码的成本,对于为什么要这样做,这应该是一个很好的教训你不想要你的眼球无法追踪的代码

while循环用于输入 然后开始使用while循环来请求一位输入(例如“您想买多少”。while循环不是用于此目的的


此代码应该正好有1个while循环,而不是3个。

您的代码格式很糟糕,您不应该在其他代码中添加选项卡。如果这些选项卡都在同一列中,请在提问之前修复代码,否则没有人会在意。“我想用数组代替嵌套的if…else语句来计算物品的价格,但我们还没有在课堂上学习数组。"你自己也知道这一点,你想挑战自己,不要放弃,多用谷歌搜索,也许不是问题,而是java中数组的概念以及如何使用它。在这里提问并从这里得到答案并不能真正提高你的知识,你会得到答案,但如果你找到了答案,答案可能就不会那么有用了self.Good luck.@希望有帮助根据我关于if…else的课程,由我正在使用的IDE自动填充的选项卡选项以及您要求的列格式都是可以接受的…很抱歉,您不想为此提供帮助。说得好,只是一个小问题…OP明确表示他们还没有学习数组在课堂上,所以我怀疑他们是否覆盖了地图。这并不是说你的答案无效(投赞成票),只是说,一个只使用原始数据类型的答案可能对OP更好,尽管它不那么干净,也有点长。我希望他们学习了一些方法,这样第二个选项对他们来说是可行的,第一个选项显示了“好”代码将如何做的一般氛围……假设我不使用calling我喜欢的样式“好”——我希望大多数java程序员都同意map解决方案看起来不错,而且非常灵活。
public double getPriceForItem(int itemNum) {
    if (itemNum == 1) return 101.00;
    if (itemNum == 2) return 119.25;
    if (itemNum == 3) return 160.75;
    if (itemNum == 4) return 203.00;
    if (itemNum == 5) return 109.12;
}