以下是需求方案-这是一个黑客问题。
一个街区共有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/