【问题标题】:How can I create a method that evaluates two variables from main class?如何创建一个评估主类中的两个变量的方法?
【发布时间】:2020-11-21 18:06:00
【问题描述】:

我要创建一个程序,用户必须在其中猜一个从 1 到 10 的数字,老师要求我们创建 6 种方法:一种是生成随机数,另一种是检查用户给出的答案和随机数相同,等等)我正在使用输入和随机数必须相同的方法,但我不确定我是否正确:

public class Guessgame {   
    static int a;
    static int a1;
    static int a2;
    static int b;

    public static void main(String[] args) {
        Scanner input = new Scanner (System.in); // User input

        b = generator(); //declara el numero aleatorio generado en "generator()"

        System.out.println("Welcome to a game, you have to guess a number between 1 to 10");
        System.out.println("You have three tries");

        System.out.println(b);

        System.out.println("What is your first guess?");

        a = input.nextInt(); //declara el numero que declaro el usuario

        evaluator();   
                                 
    }

这是评估器方法:

        public static void evaluator(){
        if ( a == b ){
            System.out.println("Good");                
        }
        else{
            System.out.println("Bad");
        }
    }

我只需要更改 evaluator();给评估者(a, b);

【问题讨论】:

  • 我强烈建议你和你的老师谈谈,让她/他向你解释。她/他知道他/她想教你什么以及如何教你。
  • 这是一个证据:/我们不应该问他

标签: java class variables methods


【解决方案1】:

它显示“良好”,因为正在初始化的局部变量 ab 与正在比较的字段(或实例变量)ab 不同。 Here 很好地解释了 Java 中不同类型的变量。

在您的代码中,int b = generator(); 正在创建一个名为 b 的局部变量。同样,int a = input.nextInt(); 正在创建一个名为 a 的局部变量。要解决此问题,请删除这些语句中的数据类型。这会将语句从声明(创建新变量)更改为初始化(设置预先存在的变量的值)。

此外,您实际上不能从static 方法中引用实例变量。您需要使用 static 修饰符将实例变量转换为类变量。

您的新代码应如下所示:

public class Guessgame {   
    static int a;
    static int a1;
    static int a2;
    static int b;

    public static void main(String[] args) {
        Scanner input = new Scanner (System.in); // User input

        b = generator(); //declara el numero aleatorio generado en "generator()"

        System.out.println("Welcome to a game, you have to guess a number between 1 to 10");
        System.out.println("You have three tries");

        System.out.println(b);

        System.out.println("What is your first guess?");

        a = input.nextInt(); //declara el numero que declaro el usuario

        evaluator();   
                                 
    }

此外,您的 evaluator() 方法总是打印“Good”,因为它正在比较实例变量(从未初始化,所以它们总是 0)。

【讨论】:

  • 谢谢,它解决了一些问题,但现在我得到了“guessGame 类中的方法评估器不能应用于给定类型”
  • @SofíaGonzález 使用evaluator(a, b) 解决了您的问题吗?
【解决方案2】:

我会将您的 evaluator() 方法转换为 FUNCTION,并通过 boolean 数据类型使其返回 true/false。此外,您可以让它接收两个值作为参数:

public static boolean evaluator(int value1, int value2) {
    return value1 == value2;
}

现在,回到main(),传入ab,然后根据返回的结果打印“Good”或“Bad”:

if (evaluator(a, b)) {
    System.out.println("Good");                
}
else {
    System.out.println("Bad");                
}

这样做还意味着您的 ab 变量可能保持在 main() 的本地,而不是更改为类的静态成员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多