不知道为什么这不起作用

时间:2014-02-14 19:41:58

标签: java loops average

这是一个我坚持上学的课程。无法弄清楚为什么它不会给我一个平均和最大的。该程序运行50次,就像我想要的那样但不会为移动和总数添加值。

import java.util.*;

public class RandomWalk {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Random rand = new Random();

        int location;
        double average;
        int greatest=0;
        int moves = 0;
        int total = 0;
        int step;

        for (int i = 0; i < 50; i++) {

            location = 4;
            step = rand.nextInt((2 - 1) + 1) + 1;


            while (location < 1 || location > 7) {
                moves ++;
                if (step == 2){
                    location ++;    
                } else {
                    location --;
                }
                if (moves > greatest) {
                    greatest = moves;
                    total += moves;
                }
            }
        }

        average = total / 50;

        System.out.println("The greatest number of steps: " + greatest);
        System.out.println("The average number of steps:  " + average);

     }

}

修复了for循环,但它仍然没有给我平均值和最高值。

至于while (location < 1 || location > 7)它应该运行直到该人站在位置1或位置7上。

这是给我的问题:

在“随机游走”中,一个人被放置在七米长的桥的中心。每个步骤随机向前或向后移动1米的人。 创建一个随机行走,确定该人在离开桥梁之前将走多少步。让应用程序平均进行50次试验,并显示平均步数和最大步数。

感谢帮助...

如果我将其更改为:`import java.util。*;

公共类RandomWalk2 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Random rand = new Random();
    double average;
    int greatest=0;
    int moves;
    int total = 0;
    int step;

    step = rand.nextInt((2 - 1) + 1) + 1;

    int location; //location of man on bridge
    for(int i = 0; i < 50; i++)
    {
       moves = 0;
       moves++;
       location = 4;
       total += moves;
       while(true)
       {
          if (step == 2) {
           location++;
          } else {
           location--;
          }

         if((location < 1) || (location > 7)) break;
       }

      if(moves > greatest) {
      greatest = moves;

      }


      }

    average = total / 50;

    System.out.println("The greatest number of steps: " + greatest);
    System.out.println("The average number of steps:  " + average);


    }

}

` 然后它会运行50次,但这个人只会移动1次,所以我的最大值和平均值总是显示为1。

3 个答案:

答案 0 :(得分:4)

不,它不会循环50次,因为您的for循环条件不正确。如果条件为fortrue循环继续迭代,而不是false。改变你的状况

for (int i = 0; i == 50; i++) {

for (int i = 0; i < 50; i++) {

然后它会一直运行到i < 50false(50次)。

答案 1 :(得分:1)

您需要了解for循环的基础知识。

  

for(初始化;终止;        增量) {       声明(S)   }

使用此版本的for语句时,请记住:

  

初始化表达式初始化循环;它被执行了   一旦,循环开始。当终止表达式求值为   假,循环终止。增量表达式在之后调用   每次迭代循环;这是完全可以接受的   表达式增加或减少值。

以下链接应该会有所帮助:

Java for loops

答案 2 :(得分:0)

location = 4;
step = rand.nextInt((2 - 1) + 1) + 1;
while (location < 1 || location > 7) {
    ..
}

何时位置小于1或大于7?

也是rgettman

提到的for循环