书中的问题:
一个经过深思熟虑的事实是,厕所里的男人通常喜欢通过占据最长的无人居住地点中间来最大化他们与已经占用的摊位的距离。
例如,考虑十个档位为空的情况。 _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
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));
}
}
}
答案 0 :(得分:-1)
您的代码有足够的问题,如果不完全重写它就很难纠正它。
但有些建议, 使用布尔数组来表示老师建议的档位,而不是现在的字符串数组。
这样的行:
while (found = false)
没有像你想象的那样工作。请记住,一个等号(=)设置变量值,而两个(==)比较值。你想在99%的时间里在while循环中使用==。
在开始之前,请尝试花时间处理您的代码并考虑您的方法。总是问自己,最简单的方法是什么?