【问题标题】:Having trouble with a one dimensional array一维数组有问题
【发布时间】:2016-11-23 05:55:45
【问题描述】:

我的任务要求:

设计一个程序,模拟人们走进剧院时剧院座位可能会被填满的情况。该程序应该通过尝试在最长的空闲座位序列的中间找到一个座位来最大化每个人之间的距离。程序应该询问用户座位的数量,然后在每次有新人占据座位时打印出图表(每行一张图表)。

到目前为止我有:

{
    //...
    System.out.println("Enter the amount of seats: ");
    int seatNumber = input.nextInt();

    boolean[] seatPosition = new boolean[seatNumber];
    String result = "";

    for(int n = 0; n < seatNumber; n++){
        for(int i = 0; i < seatNumber; i++){
            if(seatPosition[i] == false){
                result += "_" + " ";
            }else{
                result += "X" + " ";
            }
        }
        seatPosition[calculation(seatPosition)] = true;
        result += "\n";
    }
    System.out.println(result);
}

public static int calculation(boolean[] values){
    int position = 0;
    int seatNumber = 0;
    int largestCount = 0;
    int count = 0;
    for(int i = 0; i < values.length; i++){
        if(values[seatNumber] == false){
            while(values[seatNumber] == true){
                count++;
                seatNumber++;
            }
        }
        if(count > largestCount){
            position = seatNumber;
        }   
    position = position + largestCount / 2 ;
    }

    return position;
}

十个座位的输出是:

_ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ X _ _ _ _
_ _ X _ _ X _ _ _ _
_ _ X _ _ X _ _ X _
_ X X _ _ X _ _ X _
_ X X _ X X _ _ X _
_ X X _ X X _ X X _
X X X _ X X _ X X _
X X X X X X _ X X _
X X X X X X X X X _
X X X X X X X X X X

我不知道如何比较空座位的长度以及如何返回最长的空座位序列中的中间座位。输出有 11 行,因为我想在座位被占用之前以及每次新座位被占用时显示座位。抱歉,如果我不是很具体,这是第一次在这个网站上提问。

【问题讨论】:

  • 那么您的具体问题是什么?抛出一个任务并说“我不知道该怎么做”不是stackoverflow的工作方式。不过逻辑应该不难
  • 你能解释一下这段代码有什么问题吗?它正在运行,你有输出吗?它是如何失败/崩溃的?
  • 刚刚完成,很有趣。仅供参考,您的计算声明 6 int 但只使用 2 并返回一个而不触及它。你可以从那个开始;)我已经用 3 个变量(可能不是最好的)完成了它。
  • 我更改了方法内部的代码,但它只填充了第一个位置。

标签: java arrays


【解决方案1】:

我将创建一个表示行上位置的变量。设该位置为空闲座位线的起始位置。找到那个位置,然后准确计算距离下一个被占用的座位还有多长时间,将其除以 2,然后将其添加到起始座位。算法伪代码

int position
int seat#
int largest count
int count
repeat seat# times
    if seat# isn't occupied
        count number of seats until the next seat occupied.
    if count > largest count
        position = seat#
position = position + largest count / 2

【讨论】:

  • 它没有回答这个问题。最重要的是,分配是不切实际的,并且仅包含一行:如果您考虑多行,则无法正确(或至少明确)定义“序列”。
  • 而且他的输出包含不止一行。
  • 只有 1 行:它只是显示该行是如何被 10 人填满的
  • ...我是个白痴XD
  • 放轻松。我花了一些时间才弄清楚:P OP 没有正确地问这个问题....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
相关资源
最近更新 更多