0
import java.util.Scanner;

public class Vending {
    public double vend(double balance) {
        Scanner in = new Scanner(System.in);
        balance = 0;
        System.out.print("Enter a command = ");
        String command = in.nextLine();

        while (in.hasNext()) {
            if (command.equals("penny")) {
                balance = balance + 0.01;
                System.out.println("balance = " + balance);
            }
            return balance;
        }
    }
}

やあ!returnステートメントが認識されない理由を理解するためにあらゆることを試みました。「返品残高」を他の場所に置くと、system.out.printlnに到達できないと表示されます...これが機能しない理由について、親切に助けてもらえますか?? ありがとうございました!!

4

4 に答える 4

1

メソッドvend(double balance)は を返すように定義されていdoubleます。メソッド内で何が起こっても、double を返す必要があります。ここに return ステートメントがあります。

while (in.hasNext()) {
    if (command.equals("penny")) {
        balance = balance + 0.01;
        System.out.println("balance = " + balance);
    }
    return balance;
}

in.hasNext()しかし、ステートメントが を返したらどうなるfalseでしょうか? そうすれば、そのreturn内部には到達することはありません。したがって、コンパイラは、メソッドが有効な Java であることを保証できないため、不平を言っています。

の外側に return ステートメントを追加する必要がありwhileます。

あなたが言う時

「返品残高」を他の場所に置くと、system.out.printlnに到達できないと表示されます

ステートメントの直前に return ステートメントを置きますSystem.out.println()。メソッドが戻ると、ステートメントの後に発生した可能性のあるものはすべて放棄されreturn、基本的にそれ以降のすべてが役に立たなくなります。ステートメントは、メソッドの実行ブランチの最後のreturnステートメントでなければなりません。

于 2013-03-15T20:17:59.400 に答える
0

これは、return ステートメントがループ内にあるため、コンパイラが return ステートメントの実行を保証できないためです。in.hasNext()が false を返す可能性があり、そのリターンにヒットしないと想定する必要があります。

于 2013-03-15T20:17:49.480 に答える
0

whileループが実行されない可能性があるため、「Missing return statement」エラーが発生しています。これにより、プログラムは戻ることなく関数の最後に到達します。

while (in.hasNext()) {
  if (command.equals("penny")) {
    balance = balance + 0.01;
    System.out.println("balance = " + balance);
  }
  return balance;
}

in行がまったくないふりをすると、プログラムは を通過するwhileため、returnこの問題の原因となります。あなたのケースではreturn 0;、状況を処理したいなどのデフォルトのリターンを持つことができます。

于 2013-03-15T20:18:11.677 に答える