Java 为什么我输入2时会打印案例2?
我正在开发一个程序,当你将物品添加到你的包中时,跟踪物品及其成本。我有switch语句为1提供选项。添加新项目,2。打印总数和3。结束节目 出于某种原因,当我选择案例1时,它还使用我的toString方法打印总数。但是我只有案例2中的toString方法 有人能解释为什么会发生这种情况吗 这是我的主要任务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[
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
}