Наследование с помощью конструктора Java, который использует сканер - PullRequest
0 голосов
/ 07 сентября 2018

Я студент, который только начал изучать Java. Эта проблема возникает из задания, которое должно было бы создать Симулятор событий, но я буду показывать только те части кода, с которыми у меня возникла проблема, в частности конструктор.

Я намереваюсь создать объект Queue и объект PriorityQueue, который наследуется от того же объекта Queue, поскольку я хочу использовать функции объекта Queue. Я намереваюсь создать их в классе с именем QueueManager, но проблема, с которой я столкнулся, заключается в том, что я хочу использовать Scanner в конструкторе Queue (родительский класс), но я просто хочу создать пустой объект PriorityQueue (дочерний класс) без сканирования.

Сообщение об ошибке от компилятора

error: constructor Queue in class Queue cannot be applied to given types;
    public PriorityQueue(){
                          ^
  required: String[]
  found: no arguments
  reason: actual and formal argument lists differ in length

Каков был бы способ сделать это, или это даже хороший дизайн программы?

Диспетчер очереди

class QueueManager{
    private PriorityQueue p;
    private Queue q;

    public QueueManager(String [] args){
        this.q=new Queue(args);
        this.p=new PriorityQueue();
    }

Очередь

import java.util.Scanner;

class Queue{
    protected Event [] events =new Event [100];
    private int start=0;
    private int end=0;
    protected int size=0;
    private double time=0;


    public Queue(String [] args){
        Scanner s= new Scanner(System.in);
        int pos=0;
        while (s.hasNextDouble()){       
            double j=s.nextDouble();
            Event arrives=new Event("arrives",new Customer(j));
            this.events[pos]=arrives;
            pos++;
        }
        this.end=pos-1;
        this.size=pos;
    }

PriorityQueue

class PriorityQueue extends Queue{
    private double totaltime=0;
    private int totalsize=0;

    public PriorityQueue(){
    }; 

PS: Я пришел из Python и узнал кое-что оОП там (которое кажется abit сфальсифицированным), без какого-либо акцента на программировании. Если у кого-то есть жесткие и быстрые правила для Java от Python и советы по программированию ООП, не стесняйтесь делиться ими. Спасибо.

1 Ответ

0 голосов
/ 07 сентября 2018

Если вы определяете конструктор, который принимает аргументы, вы больше не получаете конструктор без аргументов бесплатно. Итак, вы вызываете конструктор, которого там нет, и именно об этом говорит компилятор.

Здесь вы не используете аргументы, переданные в конструктор Queue, просто удалите аргументы из определения конструктора. Если вам нужны оба, вы должны определить отдельные конструкторы, один из которых не имеет аргументов, а другой - аргумент String [].

Для разделения проблем: все, что у вас есть в конструкторе Queue, действительно принадлежит отдельному скрипту тестового набора, оно не относится к самой очереди.

...