首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这里的初学者,我有嵌套的while循环问题

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

Stack Overflow用户
提问于 2014-03-04 22:51:45
回答 1查看 1.2K关注 0票数 1

所以我们有两部分的任务。这部分是这么说的。

醉汉开始漫无目的地走,从灯柱开始。在每一个时间步骤,醉汉忘记了他或她的位置,并随机采取一步,无论是北,东,南,或西,概率为25%。醉汉走完N步后,离灯柱还有多远? 编写一个程序RandomWalker.java,它采用整数命令行参数N,并模拟一个随机步行者的运动N步。在每一步之后,打印随机步行者的位置,把灯柱当作原点(0,0)。此外,打印正方形的最终距离,从原点。

这个程序正常工作,这是我的代码。

代码语言:javascript
复制
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,在每个T个独立实验中使用两个整数命令行参数N和T,模拟N步的随机游走,并计算平方距离。输出平均平方距离(T平方距离的平均值)。 % java RandomWalkers 100 10000 平方距离= 101.446 % java RandomWalkers 100 10000 均方距离= 99.1674 % java RandomWalkers 200 1000 均方距离= 195.75

我想我可以做一个嵌套的with循环,同时计算内部的试验次数,同时与上面的情况完全相同。但这只是印出第一次试验的距离,而不是所有试验的平均距离。我已经搞了几天了,现在是这样的。任何和所有的帮助都是感激的。

代码语言:javascript
复制
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);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-04 23:10:06

您应该开始提高代码的可读性和可维护性,甚至通过将问题分解成几个单元来实现,这些单元将成为方法。以下是你必须做的事:

  1. 做T实验。Ech实验产生一段距离
  2. 计算距离的平均值

注意,第一步,即向用户请求N和T值,也可能是第一步。但这甚至不是必要的,因为赋值要求将它们作为命令行参数传递:它们在传递给main()方法的数组中。

如果为这两个步骤编写代码,则将得到以下代码:

代码语言:javascript
复制
double totalDistance = 0;
for (int i = 0; i < t; i++) {
    int distance = makeExperiment(n);
    totalDistance += distance;
}
double averageDistance = totalDistance / t;

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22184877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档