在标记所有重复之前,请查看代码,因为它以与其他问题不同的方式完成,我将非常感谢与此代码相关的修复。它几乎是一个计算器,它接受两个数字,然后操作员打印最终的数字(如果适用的话,还有剩余的数字)。我得到了错误:
The local variable num3 may not have been initialized
The local variable rem may not have been initialized
以下是代码:
import java.util.Scanner;
public class JCalc {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
int num1;
int num2;
int num3;
int rem;
System.out.println("Welcome to JCalc! The best calculator ever!");
System.out.print("Please enter the first number: ");
num1 = myScanner.nextInt();
System.out.print("Please enter the second number: ");
num2 = myScanner.nextInt();
System.out.print("Please enter an operator (+, -, %, *): ");
String op = myScanner.next();
if (op == "+") {
num3 = num1 + num2;
}
if (op == "-") {
num3 = num1 - num2;
}
if (op == "%") {
num3 = num1 - num2;
rem = num1 % num2;
}
if (op == "*") {
num3 = num1 * num2;
}
System.out.print("The answer is: ");
System.out.print(num3); //error
if (op == "%") {
System.out.print(" with a remainder of ");
System.out.println(rem); //error
}
}
}
当我复制粘贴它们时,最后2个括号有点混乱(抱歉)。感谢我能得到的所有帮助!
答案 0 :(得分:1)
编译器不是最好的跟随多个if条件。我会改变:
int num3;
int rem;
到
int num3=0;
int rem=0;
现在他们将无条件初始化。基本上,您不能取消分配局部变量,尽管类字段可以。
无论如何,你应该使用equals(
作为字符串。使用if("+".equals(op))
等。
答案 1 :(得分:1)
在Java中,必须先声明所有局部变量,然后才能使用它们。变量声明的基本形式如下所示:
type identifier [ = value][, identifier [= value] ...] ;
该类型是Java的数据类型之一。标识符是变量的名称。要声明指定类型的多个变量,请使用以逗号分隔的列表。
double pi = 3.14159; // declares an approximation of pi.
char x = 'x'; // the variable x has the value 'x'.
使用String.equals(String other)
函数比较字符串,而不是==
运算符
==
比较变量的引用,其中.equals()
比较您想要的值。
答案 2 :(得分:0)
两个变量都应使用默认值初始化,这是编译器警告。
永远不会在if语句之外分配 num3
,因此从技术上讲,它永远不会被分配(在编译器的眼中)。这不好,所以它会抛出警告,与rem
相同。
它不会为其他两个发出警告,因为它们是被阻止方法强制分配的Scanner.nextInt()
答案 3 :(得分:0)
String
比较不是通过==
机制完成的。这比较了对象的内存地址,而不是它们的内容
而是使用"+".equals(op)
代替
有关详细信息,请参阅How do I compare strings in Java?
Java没有为哪些值分配给局部变量做出贡献。这意味着,您必须始终指定自己的默认值,例如。
int num1 = 0;
int num2 = 0;
int num3 = 0;
int rem = 0;
答案 4 :(得分:0)
初始化变量
int num3 = 0; int rem = 0;
使用equals()方法比较字符串。
使用equals()方法而不是'=='来比较变量'op'。
if (op.equals("+")) {}
或者如果您想使用'=='进行比较,请使用intern()方法。
if (op.intern() == "+") {}