Java 嵌套循环问题



所以我已经在这段代码上工作了一段时间,我已经停滞不前了。这是一个学校项目,它分为两部分,第一部分根本没有问题。

一个酒鬼开始漫无目的地走路,从灯柱开始。在每个时间步,酒鬼都会忘记他或她在哪里,并随机迈出一步,无论是北、东、南还是西,概率为 25%。N步后酒鬼离灯柱有多远?

编写一个程序 RandomWalker.java它采用整数命令行参数 N 并模拟随机步行者的运动 N 步。每一步后,打印随机游走器的位置,将灯柱视为原点(0,0)。此外,打印与原点的最终距离的平方。

我针对这部分问题的代码是:

import java.util. *;
import java.math. *; 
public class RandomWalker {
public static void main(String args[]){
int N = Integer.parseInt(args[0]);
    Random rand = new Random();
    int x = 0;
    int y = 0;
    int XorY;
    int dist;
    int count =0;
    while(count<N){
        XorY = rand.nextInt(2);
        dist = rand.nextInt(2);   
        if(XorY==0){
            if(dist==0)
                dist = -1;
            x += dist;
            System.out.println("("+x+", " +y+")");
        }
        else{
            if(dist==0)
                dist = -1;
            y += dist;
            System.out.println("("+x+", " +y+")");
        }
        count ++;
    }
    System.out.println("Squared Distance = " + (x*x + y*y));
  }
}

对于问题的第二部分——

编写一个程序 RandomWalkers.java它接受两个命令行参数 N 和 T。在每个 T 独立实验中,模拟 N 步的随机游走并计算平方距离。输出均方距离(T 平方距离的平均值)。

% java RandomWalkers 100 10000
squared distance = 101.446 
% java RandomWalkers 100 10000
mean squared distance = 99.1674 
% java RandomWalkers 200 1000
mean squared distance = 195.75 

我想出的代码是——

import java.util.*;
import java.math.*;
public class RandomWalkers {
public static void main(String args[]) {
    Random rand = new Random();
    int N = Integer.parseInt(args[0]);
    int T = Integer.parseInt(args[1]);
    double avgDist =0;
    int stepCount =0;
    int trialCount =0;
    int x = 0;
    int y = 0;
    int XorY;
    int dist;
    
    while(trialCount<T){
        while(stepCount<N){
            XorY = rand.nextInt(2);
            dist = rand.nextInt(2);
            if(XorY==0){
                if(dist==0)
                    dist = -1;
                x += dist;
            }
            else{
                if(dist==0)
                    dist = -1;
                y += dist;
            }
            stepCount ++;
        }
        avgDist += ((x*x) + (y*y));
        trialCount++;
    }
    System.out.println("Mean Squared Distance = " + avgDist/(double)trialCount);
  }
}

我在这里被难住了很长时间,代码编译并运行,但似乎它给我的只是一个试验值,而不是所需的平均值。任何帮助不胜感激,非常感谢。(也很抱歉格式不正确,我是新来的,尽力了)。

嵌套

while loopfor loop内的解决方案如下所示。您必须在每次试验后重置xydistance变量。或者,更好的是,在 for loop 的开头定义并初始化为 0,如下所示:

public class RandomWalkers {
    public static void main(String[] args) {
        int r = Integer.parseInt(args[0]);
        int trials = Integer.parseInt(args[1]);
        double steps = 0.0;
        for (int j = 0; j < trials; j++) { // run one experiment
            int x = 0;
            int y = 0;
            int distance = 0;
            while (distance < r) { // simulate one random walking
                double i = Math.random();
                if (i < 0.25) {
                    y += 1;
                    distance = Math.abs(x) + Math.abs(y);
                    steps += 1;
                }
                if (i >= 0.25 && i < 0.5) {
                    x += 1;
                    distance = Math.abs(x) + Math.abs(y);
                    steps += 1;
                }
                if (i >= 0.5 && i < 0.75) {
                    y -= 1;
                    distance = Math.abs(x) + Math.abs(y);
                    steps += 1;
                }
                if (i >= 0.75 && i < 1) {
                    x -= 1;
                    distance = Math.abs(x) + Math.abs(y);
                    steps += 1;
                }
            }
        }
        System.out.println("average number of steps = " + steps / trials);
    }
}

最新更新