以下是需求方案-这是一个黑客问题。

一个街区共有7层,只有2部电梯。最初,电梯A在底楼,电梯B在顶楼。每当有人从第N楼呼叫电梯时,最接近该楼层的电梯就会来接他。如果两个电梯都与第N楼等距,则它们从较低楼层的电梯都将上升。

我正在尝试为上述情况编写Java代码,但无法获得预期的结果

我已经为两个升降机的位置初始化了一个整数,并为楼层呼叫初始化了一个整数。我用操作员的条件来查找位置,并打印出将要到达用户的电梯。对于问题陈述,正确的编程过程是什么?请帮助。 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

最佳答案

您只是错过了,距离应始终为正整数。

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

另外,在第一个else块之后缺少if
另外if(posA>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

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

关于java - 如何在Java程序中解决两个电梯场景,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56181106/

10-10 05:16