Переменная не меняет своего значения, несмотря на сброс - PullRequest
0 голосов
/ 08 марта 2019

Я, честно говоря, понятия не имею, в чем проблема. Эта же проблема произошла в другой части кода, которая еще не была исправлена. Проект состоит в объединении двух полностью готовых отсортированных очередей в зависимости от времени прибытия объекта клиента, которое занимает 3 целых числа. Три целых числа: время прибытия, время обслуживания и время выхода.
Он просто печатает 917 7 раз. Вот код

public static Queue2<Customer> Question3(Queue2<Customer> A, Queue2<Customer> B) {

    Queue2<Customer> C = new Queue2<Customer>(); 


    if (A.getSize() == 0 && B.getSize() == 0) { 

        System.out.println("Sorry Bro");  

    } else if (A.getSize() == 0) { 

        while (B.getSize() > 0) {

            C.enqueue(A.dequeue()); 

        }

    } else if (B.getSize() == 0) { 

        while (A.getSize() > 0) { 

            C.enqueue(B.dequeue()); 

        }

    } else { 
        Customer c1 = A.dequeue(); 
        Customer c2 = B.dequeue(); 
        int n = A.getSize() + B.getSize(); 

        for (int x = 0; x < n; x++) { 

            if (A.getSize() == 0) {

                C.enqueue(B.dequeue()); 

            } else if (B.getSize() == 0) { 

                C.enqueue(A.dequeue()); 

            } else { 

                if (c1.getArrival() > c2.getArrival()) { 

                    C.enqueue(c2); 
                    c2 = B.dequeue(); 
                    System.out.println(c2.getArrival()); 
                } else { 

                    C.enqueue(c1); 
                    c1 = A.dequeue(); 
                    System.out.println(c1.getArrival()); 
                }

            }

        }

    } 

     return C; 
} 

Вот основной метод:

 Queue2<Customer> ctest = new Queue2<Customer>(); 
    ctest.enqueue(new Customer(915,10,0)); 
    ctest.enqueue(new Customer(916,6,0)); 
    ctest.enqueue(new Customer(918,7,0)); 
    ctest.enqueue(new Customer(925,3,0)); 

    Queue2<Customer> ctest1 = new Queue2<Customer>(); 
    ctest1.enqueue(new Customer(917,10,0)); 
    ctest1.enqueue(new Customer(922,3,0)); 
    ctest1.enqueue(new Customer(924,2,0)); 

    Queue2<Customer> ctest3 = Question3(ctest,ctest1); 
    Customer c4 = ctest3.dequeue(); 

    while(ctest3.getSize() > 0) { 

       System.out.println(c4.getArrival()); 
       c4 = ctest3.dequeue(); 
       System.out.println("Printing"); 

    }
    System.out.println(c4.getArrival()); 

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Непонятно о вашем исходном вопросе. Если бы у нас была реализация Queue2, это было бы полезно.

У вас есть несколько вещей, которые следует учитывать в отношении кода,

else if (A.getSize() == 0) { 

        while (B.getSize() > 0) {

            C.enqueue(A.dequeue()); 
            // A is already empty, why you dequeue it ? 
            // same goes with the other else (may be you wanted to do C.enqueue(B.dequeue())

        }
    }

И,

Customer c1 = A.dequeue(); // dequeue usually reduce the size of the queue
Customer c2 = B.dequeue(); 
int n = A.getSize() + B.getSize(); // This `n` might not be the one you expected 
0 голосов
/ 08 марта 2019

Я думаю, что ваша логика по размеру проверяет, выключена ли.

Когда вы проверяете, пусто ли A с A.getSize() == 0, вы затем исключаете из A (который пуст, а затем проверяете, изменился ли размер B)..

Если A и B не являются одной и той же очередью, удаление из A не изменит размер B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...