【问题标题】:Keeping a variable when referring to a method multiple times多次引用方法时保留变量
【发布时间】:2019-05-13 20:36:04
【问题描述】:

我需要这个以随机顺序打印出“N1”然后“N2”。我的问题是我不知道如何保留这些值(num 和 num2),因此它不会两次打印相同的数字。我不知道如何为下次使用该方法时保留一个值。任何帮助表示赞赏:)

import java.util.Random;
public class Testing {
    public static void main(String[] args) {
        System.out.println(random());
        System.out.println(random());
    }
    public static String random() {
        Random rgen = new Random();
        int rNumber;
        int num = 0, num2 = 0;

        do {
            rNumber = rgen.nextInt(2) + 1;
        } while ((rNumber == 1 && num == 1) || (rNumber == 2 && num2 == 1));

        if (rNumber == 1) {
            num = 1;
            return "N1";
        }
        else if (rNumber == 2) {
                num2 = 1;
            return "N2";
        }
        else
            return null;
    }
}

【问题讨论】:

  • 你不能将这些变量创建为instance variables吗?
  • 同一个数字不能打印两次就不是随机的了。

标签: java string random methods return


【解决方案1】:

我认为您的意思是要保留 num 和 num2 的值。
从random() 中删除它们的声明,并将它们放在类级别,在main() 之前:

private static int num = 0;
private static int num2 = 0;

否则这个循环:

do {
    rNumber = rgen.nextInt(2) + 1;
} while ((rNumber == 1 && num == 1) || (rNumber == 2 && num2 == 1));

没有意义,因为条件:

((rNumber == 1 && num == 1) || (rNumber == 2 && num2 == 1))

永远是false。

【讨论】:

    【解决方案2】:

    要存储超出函数范围的内容,要么将其返回并将其传递给下一次调用,要么使用静态变量:

    public class Testing {
        public static int store = 0;
        /* your code*/
    }
    

    这个变量可以像任何其他变量一样被访问,但不会丢失它的值。曾经。只能更改。

    但更简单的解决方案是:

    public static void random() {
        System.out.println(Math.random() < 0.5 ? "N1\nN2" : "N2\nN1");
    }
    

    【讨论】:

      【解决方案3】:

      对于这项工作,您必须创建两个全局变量 num1 和 num2(在任何函数范围之外声明的变量)。由于您的 random() 函数是静态的,因此最好使用静态全局变量。在函数修改其值之前,全局变量不会重置并保留其值。

      【讨论】:

        【解决方案4】:

        您在} while ((rNumber == 1 &amp;&amp; num == 1) || (rNumber == 2 &amp;&amp; num2 == 1)); 的条件始终为假。初始化后,您没有为 num 和 num1 分配任何新值。 另外,也许你想要这样的东西?

        package com.testing;
        import java.util.Random;
        public class Testing {
            private static int num = 1, num2 = 2;
        
            public static void main(String[] args) {
                for(int i =0; i < 30; i++) {
                    System.out.println(random());
                }
            }
        
            public static String random() {
                Random rgen = new Random();
                int rNumber = rgen.nextInt(2) + 1;
                if (rNumber == 1) return "N1";
                else if (rNumber == 2) return "N2";
                else return null;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2011-10-07
          • 1970-01-01
          • 2015-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-11
          • 2019-04-12
          • 1970-01-01
          相关资源
          最近更新 更多