Java 是否忽略语句运算符?
在下面的方法中,当输入窗口出现时,它不会正确地对SolarPanel进行添加 当我输入“Electric”,然后输入“Yes/Yes”时,我会得到以下信息 基本价格:20000 电动型号:2000 总数:22000 但当我做“电动”+“是/是”时,我得到 基本价格:20000 电动型号:2000 太阳能电池板:5000 总数:27000 为什么Java 是否忽略语句运算符?,java,if-statement,addition,Java,If Statement,Addition,在下面的方法中,当输入窗口出现时,它不会正确地对SolarPanel进行添加 当我输入“Electric”,然后输入“Yes/Yes”时,我会得到以下信息 基本价格:20000 电动型号:2000 总数:22000 但当我做“电动”+“是/是”时,我得到 基本价格:20000 电动型号:2000 太阳能电池板:5000 总数:27000 为什么 public static int CalculateCost() {
public static int CalculateCost()
{
String typeOfCarCost = askCarType();
String SolarPanelCost = askSolarPanel();
int basicPrice = 20000;
int ElectricModel = 2000;
int SolarPanel = 5000;
int total = 0;
if (typeOfCarCost.equals("Electric") || (typeOfCarCost.equals("electric") && (SolarPanelCost.equals("No") || (SolarPanelCost.equals("no")))))
{
total = basicPrice + ElectricModel;
System.out.println("Basic Price:" + basicPrice);
System.out.println("Electric Model:" + ElectricModel);
System.out.println("Total:" + total);
}
else if (typeOfCarCost.equals("Electric") || (typeOfCarCost.equals("electric") && (SolarPanelCost.equals("Yes") || (SolarPanelCost.equals("yes")))))
{
total = basicPrice + ElectricModel + SolarPanel;
System.out.println("Basic Price:" + basicPrice);
System.out.println("Electric Model:" + ElectricModel);
System.out.println("Solar Panel:" + SolarPanel);
System.out.println("Total:" + total);
}
else
{
total += basicPrice;
System.out.println("Basic Price:" + basicPrice);
System.out.println("Total:" + total);
}
return total;
}//ends CalculateCost
例如,它要求:
电动或混合动力(我选择了电动,这将使总成本增加2000)
电的
太阳能电池板(是或否,我选择是。这将使总成本增加5000)
对
控制台窗口显示了这一点,但是,它没有为太阳能电池板添加功能。
基本价格:20000
电动型号:2000
总数:22000
此外,当同时选择电动车型和太阳能电池板时,我如何考虑总共-500的折扣
整个代码发布在下面。
有什么建议吗
import javax.swing.*;
public class short7 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
PrintOptions();
}//ends main
public static String askCarType()
{
String typeOfCar;
typeOfCar = JOptionPane.showInputDialog("Electric or Hybrid?");
if (!typeOfCar.equals("Electric") && (!typeOfCar.equals("electric") && (!typeOfCar.equals("Hybrid") && (!typeOfCar.equals("hybrid")))))
{
JOptionPane.showMessageDialog(null, "You have to choose either an Electric or Hybrid type of car.");
typeOfCar = JOptionPane.showInputDialog("Electric or Hybrid?");
}
return typeOfCar;
}//ends askCarType
public static String askSolarPanel()
{
String wantSolarPanel;
wantSolarPanel = JOptionPane.showInputDialog("Do you want a Solar Panel?");
if (!wantSolarPanel.equals("Yes") && (!wantSolarPanel.equals("yes") && (!wantSolarPanel.equals("No") && (!wantSolarPanel.equals("no")))))
{
JOptionPane.showMessageDialog(null, "You have to enter either Yes or No");
wantSolarPanel = JOptionPane.showInputDialog("Do you want a Solar Panel?");
}
return wantSolarPanel;
}//ends askSolarPanel
public static int calculateDiscount()
{
String typeOfCarSelected = askCarType();
String SolarPanelSelected = askSolarPanel();
int Discount = 0;
if (typeOfCarSelected.equals("Electric") && (typeOfCarSelected.equals("electric") && (typeOfCarSelected.equals("Hybrid") && (typeOfCarSelected.equals("hybrid") & SolarPanelSelected.equals("Yes") || SolarPanelSelected.equals("yes")))))
{
Discount = 500;
}
else
{
Discount = 0;
}
return Discount;
}//ends calculateDiscount
public static int CalculateCost()
{
String typeOfCarCost = askCarType();
String SolarPanelCost = askSolarPanel();
int basicPrice = 20000;
int ElectricModel = 2000;
int SolarPanel = 5000;
int total = 0;
if (typeOfCarCost.equals("Electric") || (typeOfCarCost.equals("electric") & (SolarPanelCost.equals("No") || (SolarPanelCost.equals("no")))))
{
total = basicPrice + ElectricModel;
System.out.println("Basic Price:" + basicPrice);
System.out.println("Electric Model:" + ElectricModel);
System.out.println("Total:" + total);
}
else if (typeOfCarCost.equals("Electric") || (typeOfCarCost.equals("electric") & (SolarPanelCost.equals("Yes") || (SolarPanelCost.equals("yes")))))
{
total = basicPrice + ElectricModel + SolarPanel;
System.out.println("Basic Price:" + basicPrice);
System.out.println("Electric Model:" + ElectricModel);
System.out.println("Solar Panel:" + SolarPanel);
System.out.println("Total:" + total);
}
else
{
total += basicPrice;
System.out.println("Basic Price:" + basicPrice);
System.out.println("Total:" + total);
}
return total;
}//ends CalculateCost
public static void PrintOptions()
{
int printTotal = CalculateCost();
}//ends PrintOptions
}//ends class short7
我认为在if语句中应该使用双
&&
,而不是单&
更改此项:
if (typeOfCarCost.equals("Electric") || (typeOfCarCost.equals("electric") & (SolarPanelCost.equals("No") || (SolarPanelCost.equals("no")))))
为此:
if (typeOfCarCost.equals("Electric") || (typeOfCarCost.equals("electric") &&(SolarPanelCost.equals("No") || (SolarPanelCost.equals("no")))))
类似地,在if
语句的其余部分中。改变这个
旁注:
正如RhinoFeeder在下面所评论的,理解&和&&之间的区别非常重要。所以区别很简单:
和&是逻辑和。它计算操作的左侧,如果为真,则继续计算右侧
和是位和。它评估操作的双方
编辑:-
即使在编辑之后,您仍然错过了此处的和
& SolarPanelSelected.equals("Yes")
尝试按以下方式更改if-else块:
if ((typeOfCarCost.equals("Electric") || typeOfCarCost.equals("electric")) && ((SolarPanelCost.equals("No") || SolarPanelCost.equals("no")))
{
total = basicPrice + ElectricModel;
System.out.println("Basic Price:" + basicPrice);
System.out.println("Electric Model:" + ElectricModel);
System.out.println("Total:" + total);
}
else if ((typeOfCarCost.equals("Electric") || typeOfCarCost.equals("electric")) && (SolarPanelCost.equals("Yes") || SolarPanelCost.equals("yes")))
{
total = basicPrice + ElectricModel + SolarPanel;
System.out.println("Basic Price:" + basicPrice);
System.out.println("Electric Model:" + ElectricModel);
System.out.println("Solar Panel:" + SolarPanel);
System.out.println("Total:" + total);
}
else
{
total += basicPrice;
System.out.println("Basic Price:" + basicPrice);
System.out.println("Total:" + total);
}
您需要使用双括号和“&&”,如下所示:-
if((类型成本等于(“电气”)| |类型成本等于(“电气”)&&((太阳能电池板成本等于(“否”)| |太阳能电池板成本等于(“否”))
{
总计=基本价格+电气模型;
System.out.println(“基本价格:+basicPrice”);
System.out.println(“电气模型:”+电气模型);
系统输出打印项次(“总计:+总计);
}
如果((成本类型等于(“电气”)| |成本类型等于(“电气”)&&(太阳能电池板成本等于(“是”)| |太阳能电池板成本等于(“是”))
{
总计=基本成本+电气模型+太阳能板;
System.out.println(“基本价格:+basicPrice”);
System.out.println(“电气模型:”+电气模型);
System.out.println(“太阳能电池板:“+SolarPanel”);
系统输出打印项次(“总计:+总计);
}
当您应该使用&&
时,您会在几个地方使用&
。然后,它总是计算两边。这可能不重要,但它的形式不好
其次,您可以控制askCarType
将返回的内容。不要使用String
s。创建enum
:
enum CarType {
ELECTRIC, HYBRID //Include GASOLINE, DIESEL if you want.
}
通过这种方式,您可以只使用=
而不是
。即使您被迫使用String
s,记录您从askCarType
返回的字符串,并且只返回Electric
和Electric
中的一个。任何时候,您都可以检查两种大写形式的字符串是否相等如果是您控制的字符串,您就犯了错误。请对askSolarPanel
执行类似操作,尽管您可能希望使用布尔值
在处理复杂的布尔表达式时,请使用括号。为了清楚起见,请经常使用括号
汽车上的太阳能电池板?为什么?
&
不会短路;它会按位进行AND运算(因此它会对两侧进行评估)。好的,我现在将进行更改,并将结果发回。为了补充答案,我想当我键入“Electric”时,您必须理解&
和&
之间的区别然后是“是/是”,我得到以下基本价格:20000电动型号:2000总计:22000但当我做“电动”+“是/是”我得到的基本价格是:20000个电动型号:2000个太阳能电池板:5000个总数:27000个为什么?@AlexiaBatyn:-我不明白为什么你们总是不想尝试,即使你们知道自己错在哪里。不是因为你们没有接受我的答案,所以我感觉很糟糕。只是我尽了最大努力指出了你们错在哪里!@RhinoFeed呃:-在我的回答中更新了这一点,先生!我为“if”和“else if”语句添加了一个双括号。现在它显示了正确的总数,无论大小写组合。我只是按照“顺序”进行操作我的讲师。他指示我们编写代码,使其包含太阳能电池板的选项:我自己写了一份奇幻的家庭作业和一道考试题。你明白我关于选择返回字符串的观点吗?