初学者在这里,我有嵌套while循环问题

时间:2014-03-04 22:51:45

标签: java while-loop

所以我们有两部分的任务。这是该部分所说的内容。

  一个酒鬼开始漫无目的地走路,从一个灯柱开始。在每个时间步,醉汉忘记了他或她的位置,并且随机地向北,向东,向南或向西迈出一步,概率为25%。 N步之后酒鬼会离灯柱多远?

     

编写一个程序RandomWalker.java,它接受一个整数命令行参数N并模拟N步的随机游走运动。在每个步骤之后,打印随机助行器的位置,处理灯柱   作为原点(0,0)。另外,打印距离原点最终距离的正方形。

这个程序运行正常,这是我的代码。

package project2;

import java.util.*;
import java.math.*;

public class RandomWalker {
    public static void main(String args[]){

        Scanner scan = new Scanner(System.in);
        Random rand = new Random();
        System.out.println("Enter the number of steps you want to take please.");
        int steps = scan.nextInt();
        int x = 0;
        int y = 0;
        int XorY;
        int dist;
        int count =0;
        while(count<steps){
            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
  平方距离= 101.446

     

%java RandomWalkers 100 10000
  均方距离= 99.1674

     

%java RandomWalkers 200 1000
  均方距离= 195.75

我以为我可以用外面做一个嵌套的while循环,同时计算内部的试验次数,同时与上面完全相同。但它只打印了第一个试验距离,而不是所有试验的平均距离。我已经搞砸了几天了,这就是它现在的样子。任何和所有的帮助表示赞赏。

package project2;

import java.util.*;
import java.math.*;

public class RandomWalkers {
    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        Random rand = new Random();
        System.out.println("Enter the number of steps you want to take please.");
        int steps = scan.nextInt();
        System.out.println("Enter the amount of trials you want run please");
        int trials = scan.nextInt();
        double avgDist =0;
        int stepCount =0;
        int trialCount =0;
        int x = 0;
        int y = 0;
        int XorY;
        int dist;

        while(trialCount<trials){

            while(stepCount<steps){
                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("Average Squared Distancee = " +avgDist/(double)trialCount);
    }
}

1 个答案:

答案 0 :(得分:2)

你应该开始使你的代码更易读和可维护,即使是你自己,通过将问题分成几个单元,这将成为方法。这是你必须做的:

  1. 进行T实验。 Ech实验产生距离
  2. 计算距离的平均值
  3. 请注意,向用户询问N和T值的第一步也可能是第一步。但这甚至不是必需的,因为赋值要求将它们作为命令行参数传递:它们在传递给main()方法的数组中。

    如果您为这两个步骤编写代码,最终会得到以下代码:

    double totalDistance = 0;
    for (int i = 0; i < t; i++) {
        int distance = makeExperiment(n);
        totalDistance += distance;
    }
    double averageDistance = totalDistance / t;
    

    所以现在你只需要实现makeExperiment()方法。但这很简单,因为你已经在作业的第一部分实现了它。您只需要删除无用的代码(向用户询问N的部分,以及显示实验结果的部分),并将其放入返回距离的方法中。