我遇到一个人在7英尺长的桥中间开始的程序有问题。这是描述:
有人正站在一座长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;
}
// }
}
}
答案 0 :(得分:3)
你问题的一部分就是你接近它的方式。您的代码应该显示从您正在进行的抽象事物到实际机械执行的整齐路径。
您的第一个问题是建立您想要发生的算法或事件序列:
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());
}
正如您所看到的,我们确保每种方法都能完成一件事。我们还将某些事物(例如Position)留作类的成员变量,而不是试图将它作为你传递的变量来处理。但是,这是一个更改,所以让我们看看你的初始化和类结构:
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
}
现在,当您想要运行1000次时,您只需将sim.runSimulation()
包裹在for循环中。
我遗漏了一张非常重要的支票(男人是退出过桥吗?)以及其他方法的实现。