【问题标题】:arrays, booleans and logical thinking数组、布尔值和逻辑思维
【发布时间】:2013-10-06 19:31:17
【问题描述】:

书中的问题:

一个经过充分研究的事实是,在洗手间里的人通常更喜欢通过占据最长的无人位置序列的中间来最大化他们与已经被占用的隔间的距离。

例如,考虑十个摊位是空的情况。 _ _ _ _ _ _ _ _ _ _

_ _ _ _ _ _ _ _ _ _

The first visitor will occupy a middle position:
_ _ _ _ _ _ X _ _ _ 
The next visitor will be in the middle of the empty area at the left.
_ _ X _ _ X _ _ _ _

编写一个程序,读取档位的数量,然后在档位填满时以上面给出的格式打印出图表,一次一个。提示:使用布尔值数组来指示摊位是否被占用。

我正在努力编写这个问题,我对如何应用布尔值以及如何解决一般问题感到困惑。我写了这段代码,但我认为这没有任何意义, 非常感谢您的帮助。

import java.util.Random;
import java.util.Arrays;


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

        Random random = new Random();

        String[] array = {"_"," _ "," _ "," _ "," _ "," _ "," _ "," _ "," _ "," _"};



        boolean filled = true; // Checking to see if stalls are completely filled

        while (filled = true)  
        {
            for (int i = array.length - 1; i > 0 ; i--)
            {
              String number = array[i];
              if (!(number.equals("X")))    //  if filled,all stalls would be marked as X
                {

                     filled = false;
                }
            }
        }

        boolean found = false;    //checking if "X" is found 

        while (filled = false)
        {

            while (found = false) // if not found generate a new number for array and set it to "X";
            {
                int  number1 = random.nextInt(10) + 1;
                if (!(array[number1].equals("X")))
                {
                    array[number1] = "X";
                    found = true;
                }
            }   
            while (found = true)                
            {
                int number2 = random.nextInt(10) + 1;

                for ( int i = 0; i < array.length; i++)
                {
                    if (!(array[i].equals("X")))
                    {
                        array[number2] = "X";
                        found = false;
                    }
                }
            }
            System.out.println(Arrays.toString(array));
        }
    }
}

【问题讨论】:

  • 帮助什么?学习使用调试器并按照您的代码执行操作。
  • @Sotirios Delimanolis 为什么这会让我成为家庭作业的事情...... kalispera!
  • @meewoK 它确实来自一本书! Na eisai kala!
  • 提示建议将_ _ _ _ _ _ X _ _ _ 表示为[ false, false, false, false, false, false, true, false, false, false ]
  • 仅供参考,filled = true 正在使用赋值运算符,它不会做你想要的。请改用while (filled)(以及while (!filled) 用于何时应该为假)。您实际上还应该使用布尔数组而不是字符串数组 - 它会让您的生活更轻松。

标签: java arrays boolean


【解决方案1】:

你的代码有很多问题,如果不完全重写它就很难纠正它。

虽然有一些建议, 使用布尔数组来表示老师建议的摊位,而不是像现在这样的字符串数组。

这样的行:

while (found = false)

没有按照您认为的方式工作。请记住,一个等号 (=) 设置变量值,而两个 (==) 比较值。您将希望在 99% 的时间循环中使用 ==。

尝试花时间处理您的代码,并在开始之前考虑您的方法。经常问自己,最直接的方法是什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多