【问题标题】:Java Using the return value of a loop within the loopJava在循环内使用循环的返回值
【发布时间】:2018-05-27 11:38:51
【问题描述】:

抱歉,英语是我的第一语言。我正在构建一个主类和方法来创建一堆随机数。我想使用一个 for 循环,并希望在循环的每个步骤中使用最后一个循环的结果。

要求用户输入 3 个整数以使用以下公式创建一个随机数: z = (a*z+b)%m;

1.步骤 z = (a*0+b)%m;假设结果是 7。 2.步骤: z= (a*7+b)%m 等等。

我希望程序给我 20 个随机数。 在循环的第一步中,随机数 z 为 0,然后随着每增加一步,随机数是根据最后一步的结果构建的。 我希望你们明白我想说什么。

到目前为止我的代码:

import java.io.*;
public class Zufallszahlentest {

    public static void main (String [] args) throws IOException {

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Geben Sie nacheinander die Werte für a,b &m ein.");
        int a = Integer.parseInt(in.readLine());
        int b = Integer.parseInt(in.readLine());
        int m = Integer.parseInt(in.readLine());

        Methode(a,b,m);
        System.out.println(Methode(a,b,m));
    }

    static int Methode(int a, int b, int m){
            int z = 0;
            for (int i = 0; i <= 20; i++) {
                 z = (a*z+b)%m;
            }
            return z;
     }
}

我已经坐了好几个小时了,我已经建立了巨大的循环,但没有任何结果,我觉得每次尝试都变得越来越愚蠢。

我们将不胜感激。

【问题讨论】:

  • 使 z 成为静态整数

标签: loops for-loop random return


【解决方案1】:

如果您想保留以前的值,请将其设为静态。你有 在类声明的开头声明'z'一个静态int 因此“z”将成为一个类变量,该变量将是一次 初始化并保留之前的值。

import java.io.*;
public class Zufallszahlentest {
    static int z=0; //class variable

    public static void main (String [] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Geben Sie nacheinander die Werte für a,b &m ein.");
        int a = Integer.parseInt(in.readLine());
        int b = Integer.parseInt(in.readLine());
        int m = Integer.parseInt(in.readLine());

        Methode(a,b,m);
        System.out.println(Methode(a,b,m));
    }

    static int Methode(int a, int b, int m){
            for (int i = 0; i <= 20; i++) {
                 z = (a*z+b)%m;
            }
            return z;
     }
}

【讨论】:

  • 我认为这在 Java 中是不合法的。
  • 为什么不呢?通过将其设为静态,它将成为一个类变量,并且该值将被保留。
  • 它必须是static 在方法之外,而不是在方法内部。
  • 当然,理想情况下,名称应该比z 更具描述性,但这对于 OP 来说很容易更改。
【解决方案2】:

你的循环在错误的地方 - 它应该包括 println,如果你希望 println 发生 20 次。这应该有效:

import java.io.*;
public class Zufallszahlentest {

    public static void main (String [] args) throws IOException {

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Geben Sie nacheinander die Werte für a,b &m ein.");
        int a = Integer.parseInt(in.readLine());
        int b = Integer.parseInt(in.readLine());
        int m = Integer.parseInt(in.readLine());

        int z = Methode(a, b, m, 0);
        for (int i = 0; i < 20; i++) {
            System.out.println(z);
            z = Methode(a, b, m, z);
        }
    }

    static int Methode(int a, int b, int m, int z) {
        return (a * z + b) % m;
    }
}

【讨论】:

  • 哇,伙计们,非常感谢。我又想得太复杂了。我开始用 if/else 语句和其他语句构建循环。我猜这一行: int z = Methode(a, b, m, 0);是我无法理解的重点,但现在很清楚了。再次感谢各位。
猜你喜欢
  • 2020-02-25
  • 2018-08-08
  • 2016-09-03
  • 1970-01-01
  • 2017-04-01
  • 2015-02-24
  • 2017-02-27
  • 2018-02-21
  • 1970-01-01
相关资源
最近更新 更多