【问题标题】:How to solve a two elevator scenario in java programjava程序中如何解决两个电梯的场景
【发布时间】:2019-05-17 06:55:05
【问题描述】:

以下是需求场景 - 这是一个hackerearth问题。

一个街区有 7 层楼,只有 2 部电梯。最初电梯 A 位于底层,电梯 B 位于顶层。每当有人从第N层呼叫电梯时,离该层最近的电梯就会来接他。如果两台电梯距离第N层等距,则下层电梯上来。

我正在尝试为上述场景编写 java 代码,但无法获得预期的结果

我已经初始化了两个电梯位置的整数和一个用于楼层呼叫的整数。我与操作员一起使用 if 条件来查找位置并打印出哪个电梯将到达用户。什么是问题陈述的正确编程过程。请帮忙。 TIA。

import java.util.*;

class TestClass {
    public static void main(String args[] ) throws Exception {

        Scanner s = new Scanner(System.in);
        int count=s.nextInt();
        int[] fc=new int[count];
        int posA=0;
        int posB=7;


        for(int i=0;i<count;i++){
            fc[i]=s.nextInt();

            if((fc[i]-posA)<(posB-fc[i])){
                posA=fc[i];
                System.out.println("A");
            }

            if((fc[i]-posA)==(posB-fc[i])){
                if(posA<posB){
                    posA=fc[i];
                    System.out.println("A");
                }
                else if(posA>posB){
                    posB=fc[i];
                    System.out.println("B");
                }
            }
            else{
                posB=fc[i];
                System.out.println("B");
            }            
        }
    }
}

下面提到了我的输入、当前和预期输出。

输入 - 10 0 6 4 1 1 2 4 0 3 1

电流输出 - A B B B A B B B A B

预期输出 - A B B A A A B A B A

【问题讨论】:

  • 你的代码调试了吗?
  • 首先:您在第一个 if 块之后缺少一个 else。第二:Scanner 很好,但无助于理解问题。尝试提供代码,摆脱它(完全初始化fc)。第三:尝试在您的代码中计算一次距离。有助于理解代码。

标签: java io java.util.scanner data-manipulation


【解决方案1】:

你刚刚错过了,距离应该总是一个正整数。

计算距离时使用Math.abs()

另外,在第一个 if 块之后缺少一个 else。 加上if(posA&gt;posB) 太多了,因为它过滤掉了posA==posB

我的代码:

package de.test.lang.stackexchange;

public class Lifts {

    public static void main(String args[]) throws Exception {
        int[] fc = new int[]{0, 6, 4, 1, 1, 2, 4, 0, 3, 1};
        int posA = 0;
        int posB = 7;

        for (int reqPos: fc) {
            final int distA = Math.abs(reqPos - posA);
            final int distB = Math.abs(reqPos - posB);

            if (distA < distB) {
                posA = reqPos;
                System.out.println("A");
            } else if (distA == distB) {
                if (posA < posB) {
                    posA = reqPos;
                    System.out.println("A");
                } else {
                    posB = reqPos;
                    System.out.println("B");
                }
            } else {
                posB = reqPos;
                System.out.println("B");
            }
        }
    }
}

输出:A B B A A A B A B A

(顺便说一句:很好的作业......)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多