Как решить сценарий двух лифтов в Java-программе - PullRequest
0 голосов
/ 17 мая 2019

Ниже приведен сценарий с требованиями - это проблема с взломом.

В блоке 7 этажей и только 2 лифта. Первоначально лифт A находится на первом этаже, а лифт B - на верхнем этаже. Всякий раз, когда кто-то вызывает лифт с N-го этажа, ближайший к нему лифт приходит за ним. Если оба лифта находятся на одинаковом расстоянии от N-го этажа, их поднимает лифт с нижнего этажа.

Я пытаюсь написать код Java для вышеуказанного сценария, но не смог получить ожидаемый результат

Я инициализировал целые числа для положения обоих лифтов и целое число для вызова на полу. Я использовал условие с операторами, чтобы найти позицию и напечатал, какой лифт достигнет пользователя. Что может быть правильной процедурой программирования для постановки задачи. Пожалуйста, помогите. ТИА.

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

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

Вы только что пропустили, что расстояние ВСЕГДА должно быть положительным целым числом.

Используйте 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

(КСТАТИ: хорошая домашняя работа ...)

0 голосов
/ 17 мая 2019

Здравствуйте. Есть одно предложение. Мы можем сделать это в меньшем количестве строк, используя троичный оператор в java

public static void main(String[] args) {
        int numberOfFloors = 7 ;            
        int midFloor = Math.round((float)numberOfFloors/2);
        System.out.println(midFloor);
        int[] fc = new int[]{0, 6, 4, 1, 1, 2, 4, 0, 3, 1};

        for (int currentFloor : fc) {
            String liftToBeCalled = numberOfFloors-currentFloor> midFloor?"A":"B";
            System.out.print(liftToBeCalled+" ");
        }
    }

Это даст

A B B A A A B A B A 
...