1

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

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
    }






}

}

最后两个括号在我复制粘贴时有点乱(抱歉)。感谢我能得到的所有帮助!

4

5 回答 5

1

编译器在遵循多个 if 条件方面并不是最好的。我会改变:

int num3;
int rem;

int num3=0;
int rem=0;

现在它们将被无条件地初始化。基本上,您不能未分配局部变量,尽管类字段是可以的。

无论如何,你应该使用equals(字符串。使用if("+".equals(op))等。

于 2013-09-02T07:00:03.360 回答
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. 局部变量
  2. 局部变量

使用String.equals(String other)函数来比较字符串,而不是==运算符。
==比较变量的引用,.equals()比较你想要的值。

  1. 字符串比较
于 2013-09-02T07:00:40.410 回答
0

两个变量都应该用默认值初始化,这是一个编译器警告。

num3永远不会在 if 语句之外分配,因此从技术上讲,它永远不会被分配(在您的编译器看来)。这不好,所以它会抛出警告,与rem.

它不会对其他两个发出警告,因为它们是由阻塞方法强制分配的Scanner.nextInt()

于 2013-09-02T07:00:15.527 回答
0

String比较不是通过==机制进行的。这比较对象的内存地址,而不是它们的内容

"+".equals(op)改为使用

请参阅如何比较 Java 中的字符串?更多细节

Java 对分配给局部变量的值没有保证。这意味着,可以肯定的是,例如,您应该始终指定自己的默认值。

int num1 = 0;
int num2 = 0;
int num3 = 0;
int rem = 0;
于 2013-09-02T07:00:41.690 回答
0
  1. 初始化变量

    整数 3=0;int rem=0;

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

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

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

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

if (op.intern() == "+") {}
于 2013-09-02T07:13:54.607 回答