1

これをすべて重複としてマークする前に、他の質問とは異なる方法で行われているコードを確認してください。このコードに関連する修正をいただければ幸いです。これはほとんど計算機で、2 つの数値を受け取り、オペレーターが最終的な数値 (および、該当する場合は剰余) を出力します。エラーが発生します:

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 つの括弧は、コピーして貼り付けたときに少しめちゃくちゃになりました (申し訳ありません)。私が得ることができるすべての助けに感謝します!

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] ...] ;

type は Java のデータ型の 1 つです。識別子は変数の名前です。指定した型の複数の変数を宣言するには、コンマ区切りのリストを使用します。

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

どちらの変数もデフォルト値で初期化する必要があります。これはコンパイラの警告です。

num3if ステートメントの外で割り当てられることはないため、技術的には割り当てられません (コンパイラの目には)。これは良くないので、 と同じようにその警告をスローしremます。

他の 2 つはブロッキング メソッドによって強制的に割り当てられるため、警告はスローされません。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 に答える