Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我输入2时会打印案例2?_Java_Switch Statement_Tostring - Fatal编程技术网

Java 为什么我输入2时会打印案例2?

Java 为什么我输入2时会打印案例2?,java,switch-statement,tostring,Java,Switch Statement,Tostring,我正在开发一个程序,当你将物品添加到你的包中时,跟踪物品及其成本。我有switch语句为1提供选项。添加新项目,2。打印总数和3。结束节目 出于某种原因,当我选择案例1时,它还使用我的toString方法打印总数。但是我只有案例2中的toString方法 有人能解释为什么会发生这种情况吗 这是我的主要任务 import java.util.Scanner; public class ShoppingBagTracker { public static void main(String[

我正在开发一个程序,当你将物品添加到你的包中时,跟踪物品及其成本。我有switch语句为1提供选项。添加新项目,2。打印总数和3。结束节目

出于某种原因,当我选择案例1时,它还使用我的toString方法打印总数。但是我只有案例2中的toString方法

有人能解释为什么会发生这种情况吗

这是我的主要任务

import java.util.Scanner;
public class ShoppingBagTracker {

    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);

        float taxRate, cost;
        int items, newItems, choice;
        String receipt;
        String menu = ("1. Add items" +
        "2. Get receipt"
        + "3. Exit");

        System.out.print("Enter the sales tax rate: ");
        taxRate = in.nextFloat();
        ShoppingBag myBag = new ShoppingBag(taxRate);

        items = 0;
        do{
            System.out.println("What would you like to do?");
            System.out.println(menu);
            choice = in.nextInt();

            switch(choice){
                case 1:
                    System.out.print("Enter cost of item: ");
                    cost = in.nextFloat();     

                    System.out.print("Enter number of items: ");
                    newItems = in.nextInt();
                    items = items + newItems;

                    myBag.place(items, cost);
                    myBag.getItems();
                    myBag.getCost();
                    myBag.getTotal();
                    myBag.getAverage();
                case 2:
                   receipt = myBag.toString();
                   System.out.println(receipt);
                case 3:
                    break;
                default:
                    System.out.println("That is not an option");      
            }
        }while(choice != 3);            
    }    
}
这是我的购物袋课

public class ShoppingBag {

    public float taxRate;
    public int items;
    public float cost;
    public float average;
    public float totalCost;
    public float finalCost;

    public ShoppingBag(float taxRate)
    {
        this.taxRate = taxRate;
    }

    public void place(int newitems, float newcost)
    {
        items = newitems;
        cost = newcost;

        cost = items * cost;
    }

    public int getItems()
    {
        return items;
    }

    public float getCost()
    {
        return cost;
    }

    public float getTotal()
    {
        finalCost = cost + (cost * taxRate);
        return finalCost;
    }

    public float getAverage()
    {
        average = finalCost/items;
        return average;
    }

    @Override
    public String toString()
    {
        return("Items: " + items + " Cost: " + cost + " Total cost: " + finalCost + " Average cost: " + average);
    }
}

您需要在case1主体中添加break语句

                case 1:
                System.out.print("Enter cost of item: ");
                cost = in.nextFloat();     

                System.out.print("Enter number of items: ");
                newItems = in.nextInt();
                items = items + newItems;

                myBag.place(items, cost);
                myBag.getItems();
                myBag.getCost();
                myBag.getTotal();
                myBag.getAverage();
                break;
这是官方的

您需要有磨合开关箱

如果没有中断,将在此处执行所有案例

在Java中

结语

如果案例中没有返回,您应该对每个案例使用break

以下情况下,您不需要休息


开关案例不限于执行一个“案例”。它执行从匹配案例到中断的所有代码;或者到开关的末端


在你的情况下,增加休息;在案例2之前,您应该对所有案例都有一个中断,或者在所有案例中都有一个返回语句。否则,Java将执行匹配case之后的所有case

swicth(urSwitch){
   case 1:// logic
      break; // or return something
   case 2:// logic
      break; // or return something
   case 3:// logic
      break; // or return something
}

你忘了在你的案例末尾添加break,因为你没有break,所以它属于案例2。如果有人提到在每个案例和ScannernextLine中添加break,我会投弃权票。。。并且知道为什么…不只是return是一个异常,而是退出开关的每个流控制语句。不过,对于初学者来说,休息时过于热情可能更好。
   switch (cases){
        case "a":
            return "a";
        case "b":
            return "b";
        default:
            return "default";
    }
swicth(urSwitch){
   case 1:// logic
      break; // or return something
   case 2:// logic
      break; // or return something
   case 3:// logic
      break; // or return something
}