我刚刚开始学习Java编程,并在上一部分的第一个项目中收到了这个错误,“税前费用”我必须弄乱我的变量,但我不确定。有任何想法吗?
这是我在编译器上收到的错误:
错误:二元运算符的错误操作数类型
首先输入:double
第二种类型:字符串
2个错误
import java.util.Scanner;
public class project1Naja {
public static void main(String[] args) {
String firstName; // To hold first name
String lastName; // To hold last name
String hours; // Child's hours
final String date; // Date of Service
final double RATE; // Hourly rate
final double TAX_RATE; // Tax percentage
int fee; // Cost before tax added
int taxAmount; // Tax total
double totalFee; // Fee including tax
// Scanner created to read input.
Scanner childCare = new Scanner(System.in);
System.out.print("Enter your first name: " );
firstName = childCare.nextLine();
System.out.print("Enter your last name: " );
lastName = childCare.nextLine();
System.out.print("Enter the child's hours here: " );
hours = childCare.nextLine();
System.out.print("Enter date here: " );
date = childCare.next();
System.out.println("Child Care Service Bill For: " + firstName
+ lastName);
System.out.println("Date of Service: " + date);
System.out.println("Number of hours: " + hours);
System.out.println("Fee before taxes: " = RATE * hours);
}
}
答案 0 :(得分:1)
您需要在访问之前初始化局部变量,
在这种情况下RATE
是局部变量,在访问时未初始化
System.out.println("Fee before taxes: " = RATE * hours);
通过
初始化它 final double RATE = 0.50; // some rate value
且String
也不能与double
答案 1 :(得分:0)
这里要注意两件事......
String hours;
小时是字符串,因此您不能将任何变量与字符串相乘
System.out.println("Fee before taxes: " = RATE * hours);
错误的语法......它应该是System.out.println("Fee before taxes: =" + RATE * hours);
也是RATE,无论你用什么倍增,plz都会初始化。
答案 2 :(得分:0)
您的代码无法编译,因为首先 =
" "
用于分配,所以首先要做的是将其保留在{{1 }}
第二次,您无法在"Fee before taxes: "
和*
之间使用乘法运算符String
,为此,您需要解析{ {1}}就像那样:double
。
第三,您需要在使用之前初始化所有局部变量(String
,因为它们在Java中没有默认值,您可以从Java docs了解局部变量。
Definite Assignment中还详细介绍了
对于局部变量或空白最终字段x的每次访问,x必须为 在访问之前明确分配,或发生编译时错误。
因此,对于您的示例,在分配之前使用的唯一变量是Double.parseDouble(hours)
,因此您不必初始化其他变量:
final
最后,您的代码必须如下所示:
RATE
答案 3 :(得分:0)
这里有三件事使你的代码无法正确编译。
您将小时数定义为String
。如果你只是想要显示字符串而不操纵它或将它与另一个字符串组合,那就没问题。但是,这一行:
System.out.println("Fee before taxes: " = RATE * hours);
试图告诉编译器将类型String
与类型double
相乘。你不能在java中这样做。小时数必须定义为double
以匹配您的费率,或定义为byte
,int
,short
,long
或{{1} }。请记住,如果您需要部分小时(例如.5小时),则需要使用float
或double
,因为这些是唯一可以使用小数操作的两种原始数据类型添加演员类型。
或者,您可以将float
解析为String
,其内容类似于double
,但这是处理问题的间接“解决方法”,因此我建议改为改变小时类型。
每当您在java中声明Double.parseDouble(hours)
任何数据类型时,必须为其分配值。您不能像在变量列表中那样简单地保留它。它应该说出
final
因此,当你尝试这一行:
final double RATE = 7.2;
编译器调用尚未声明的final,因此发生编译错误。另一方面,变量可以保持未启动但必须为它们分配一个与其数据类型匹配的值,然后才能在代码行中实际引用。如果不是,您将收到编译错误。
在最后的印刷声明中,您有System.out.println("Fee before taxes: " = RATE * hours);
。
这是一个简单的语法错误。您永远不能在打印语句中使用操作数("Fee before taxes" = RATE * hours)
。允许的唯一操作数(为了这个基本情况)是=
来向字符串添加更多文本。这一行应为:
+
简称:
将变量小时更改为键入System.out.println("Fee before taxes" + (RATE * hours));
,将double
RATE分配给数字,并更改最终打印语句中的语法错误。在那之后你应该顺利航行。
P.S。的
我还注意到你还有两个名为“date”和“TAX_RATE”的决赛。这些也应该被声明,否则在实现它们时会遇到类似的错误。
希望这有帮助!