1

したがって、かなり単純なコードがいくつかありますが、2 番目のクラスでは、どちらのメソッドも を見つけることができませんname。これはスコープの単純な問題ですか?

package rpg;
import java.util.Scanner;

public class Start {
    static String name;
    public static void main (String args[])
    {
        Engine test12 = new Engine();
        name = test12.gameStart();
        System.out.println("So, " + name + " it is!");
    }       
}

このクラスを呼び出すもの:

package rpg;
import java.util.Scanner;

public class Engine {
    static boolean playerNameLike = false;
    String name = (" ");

    public String gameStart()
    {
        while (playerNameLike = false)
        {
            System.out.println("So, whats your name?");
            Scanner gameStart = new Scanner(System.in);
            name = (gameStart.next());
            nameTest();
        }
        return name;
    }

    public boolean nameTest()
    {
        System.out.println("Does " + name + " sound good?");
        System.out.println("(Y)es or (N)o?");
        Scanner gameStart = new Scanner(System.in);
        String yesNo = new String (gameStart.next());
        if (yesNo.equals("Y"))
        {
            playerNameLike = true;
            return playerNameLike;
        } 
        if (yesNo.equals("N"))
        {
            playerNameLike = false;
            return playerNameLike;
        }
        return playerNameLike;
    }
 }

私が間違っていることを誰かが知っていますか?

4

2 に答える 2

2

nameメソッドでローカル変数を作成し、次のようにパラメーターとしてgameStart渡す必要があります。nameTest

public String gameStart()
{
    String name = "";
    boolean playerNameLike = false;
    while (!playerNameLike)
    {
        System.out.println("So, whats your name?");
        Scanner gameStart = new Scanner(System.in);
        name = (gameStart.next());
        playerNameLike  = nameTest(name);
    }
    return name;
}

public boolean nameTest(String name) // Use your current code from here on

また、ステートメントfalse内の変数に代入しています。ifこれは許可されていますが、希望どおりにはなりません。を使用するか==、(より良い) を使用!して変数を否定する必要があります。

while (!playerNameLike) ...
于 2012-11-05T15:03:46.447 に答える
0

==次の条件で比較するために使用します。

 while (playerNameLike == false)

または、その否定をブール型としてチェックするだけです:

 while (!playerNameLike)

また、次のようにインスタンス化をループのScanner外に移動します。while

 Scanner gameStart = new Scanner(System.in);
 while (!playerNameLike)
 {
    System.out.println("So, whats your name?");
    name = (gameStart.next());
    nameTest();
  }
于 2012-11-05T15:06:34.597 に答える