Java 爪哇人在桥上 我在一个项目中遇到麻烦,一个人从7英尺的桥中间开始。以下是描述:

Java 爪哇人在桥上 我在一个项目中遇到麻烦,一个人从7英尺的桥中间开始。以下是描述:,java,Java,有人站在一座7英尺长的桥的中心。他们的步幅正好是一英尺。他们无法控制他们要去的方向,但桥很窄,他们只能向前或向后走一步 编写一个程序,计算出该人员在离开驾驶台之前要走多少步。让程序执行此模拟1000次,并在输出时显示平均和最大步数。(提示:生成一个0或1的随机数,让一个向前相等,另一个向后相等)。这样做20次,以便进行比较观察 这就是我到目前为止所做的: import java.util.Random; import java.util.Scanner; import java.text.Dec

有人站在一座7英尺长的桥的中心。他们的步幅正好是一英尺。他们无法控制他们要去的方向,但桥很窄,他们只能向前或向后走一步

编写一个程序,计算出该人员在离开驾驶台之前要走多少步。让程序执行此模拟1000次,并在输出时显示平均和最大步数。(提示:生成一个0或1的随机数,让一个向前相等,另一个向后相等)。这样做20次,以便进行比较观察

这就是我到目前为止所做的:

import java.util.Random;
import java.util.Scanner;
import java.text.DecimalFormat;

public class prog214a
{
    public static void main(String[] args)
    {
        Random generator = new Random();
        System.out.println("1000 iterations");
        int runs = 0;
        int iter = 1000;
        double count = 7.0 / 2.0;
        int random;
        System.out.println("Run\tAvarage\tGreatest Number of Steps");
        // for(runs=1;runs<20; runs+=1)
        // {
        for (iter = 1000; iter > 1; iter -= 1)
        {
            double tries = 1;
            double avg = count / tries;
            random = generator.nextInt(2);
            if (random == 0)
            {
                count -= 1;
            }
            if (random == 1)
            {
                count += 1;
            }
            if (count <= 0 || count >= 7)
            {
                System.out.println("#" + runs + ":\t" + avg + "\t" + count);
                count = 0;
                runs += 1;
            }
            tries += 1;
        }
        // }
    }
}
import java.util.Random;
导入java.util.Scanner;
导入java.text.DecimalFormat;
公共类prog214a
{
公共静态void main(字符串[]args)
{
随机生成器=新随机();
System.out.println(“1000次迭代”);
整数=0;
国际热核实验堆=1000;
重复计数=7.0/2.0;
int随机;
System.out.println(“Run\tAvarage\t最大步数”);
//用于(运行=1;运行1;iter-=1)
{
两次尝试=1;
双平均值=计数/尝试;
random=发电机。下一个(2);
如果(随机==0)
{
计数-=1;
}
如果(随机==1)
{
计数+=1;
}
如果(计数=7)
{
System.out.println(“#”+runs+”:\t“+avg+”\t“+count);
计数=0;
运行次数+=1;
}
尝试次数+=1;
}
// }
}
}

问题的一部分在于处理问题的方式。您的代码应该显示一条从您正在做的抽象事情到实际机械执行的整洁路径

您的第一个问题是建立一个算法或您希望发生的事件序列:

Print out position
Decide direction
Move
Repeat n times
现在,让我们将这些粗略的步骤转换为代码。为此,我们通过为每一项制定方法:

public void printPosition();
public int findDirectionVector();
public void updatePosition(int move);//move is a vector
public void runSimulation(int iterations);
现在让我们填写控制方法:

public void runSimulation(int iterations) {
   for (n = 0; n < iterations ; n++) {
       executeIteration();//simple! 
   }
}

private void executeIteration() {
  printPosition();
  updatePosition(findDirectionVector());
}
现在,如果要运行1000次,只需将sim.runSimulation()封装在for循环中即可


我遗漏了一个非常重要的检查(此人是否已退出网桥?)以及其他方法的实现,供您执行

这是编程课的作业吗?我有点麻烦。我看到一个作业和一些代码,但没有构造良好的问题。你到底被困在哪里?什么使你困惑?当然,我们不会帮你做家庭作业,我想你不会要求我们做的。但请知道,提出一个好问题需要一些努力,就像回答问题一样。请在你的问题上多做点努力,这样我们就能帮助你了。我的缺点是,我的程序对所有答案都给出了1.0和-1.0,它给了我200行而不是20行。代码出了什么问题,让它给我这些奇怪的答案?至少你应该在最后一个
if
块中将
计数重置为3.5,而不是0。同样在
for
条件下,使其
iter>0
,因为现在您只需执行999个循环。200行是什么意思?因为你需要进行999次迭代。程序应该运行1000次迭代,但打印20次结果。我解决了你指出的两个问题,它仍然给我两个答案中的一个,(平均值和最大步数)0.5和-0.5或6.5和7.5。另外,它给了我69个输出,而不是20个。问题是,我几个月前才开始编程,我不知道你的解释是怎么回事。在这个作业中,我们应该使用循环、决策、随机数、输入和输出。我该如何编写这样的程序?我想让我困惑的是让它运行1000次,然后让它输出20个输出:/1个数据集就是1000次迭代。因此,您可以向前和向后随机运行1000次,并捕获1000次迭代中的平均和最大步骤数。你这样做了20次,给了你20个平均步数和20个最大步数。天哪,你刚刚睁开了我的眼睛0.0我一直在试图计算整个过程需要多少步,但现在我看到我应该专注于步骤和平均步数。不过有一件事,您将如何捕获最大数量的步骤?一次迭代:采取随机步骤;做1000次。收集在一个数组中,该数据集的最大xRandomSteps;执行20次。现在它不再工作了:/n每当我重置计数时,无论发生什么情况,它都会将其保持为3.5。。
public Simulation {
  private int position = 0;
  private int iterations = 0;//number of times the person moves before you stop!

  public Simulation(int iterations) {
    this.iterations = iterations;
  }

  public static void main(String[] args) {
    Simulation sim = new Simulation(1000);//Run with 1000 iterations
    sim.runSimulation();
  }

  //your other methods go here
}