Java计算器错误

时间:2013-09-02 06:58:29

标签: java variables initialization calculator

在标记所有重复之前,请查看代码,因为它以与其他问题不同的方式完成,我将非常感谢与此代码相关的修复。它几乎是一个计算器,它接受两个数字,然后操作员打印最终的数字(如果适用的话,还有剩余的数字)。我得到了错误:

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个括号有点混乱(抱歉)。感谢我能得到的所有帮助!

5 个答案:

答案 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'.  
  1. local variables
  2. local variables
  3. 使用String.equals(String other)函数比较字符串,而不是==运算符 ==比较变量的引用,其中.equals()比较您想要的值。

    1. string comparison

答案 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)

  1. 初始化变量

    int num3 = 0; int rem = 0;

  2. 使用equals()方法比较字符串。

  3. 使用equals()方法而不是'=='来比较变量'op'。

    if (op.equals("+")) {}
    

    或者如果您想使用'=='进行比较,请使用intern()方法。

    if (op.intern() == "+") {}