2016-05-18 1 views
-2

Я пытаюсь сделать игру палача для школьного задания. Нам нужен абстрактный класс, поэтому мы с моим партнером создали абстрактный класс HangmanImages.Как сделать формальные и фактические аргументы не разными по длине? Для Hangman

import javax.swing.*; 
import java.awt.*; 
import java.awt.image.ImageObserver; 
public abstract class HangmanImages 
{ 
    private String imagename; 
    private ImageIcon imageIcon; 

    public HangmanImages(String i) 
    { 
     imagename = i; 
     imageIcon = new ImageIcon(i); 
    } 

    public ImageIcon getImage() 
    { 
     return imageIcon; 
    } 
} 

Мы также сделали 10 подклассов для каждого изображения.

import javax.swing.*; 
import java.awt.*; 
import java.awt.image.ImageObserver; 
public class Hangman9 extends HangmanImages 
{ 
    private String imagename; 
    private ImageIcon imageIcon; 

    public Hangman9(String i) 
    { 
     imagename = i; 
     imageIcon = new ImageIcon(i); 
    } 
    public ImageIcon getImage() 
    { 
     return imageIcon; 
    } 

} 

При компиляции мы получаем фактическую ошибку, а формальные списки аргументов различаются по длине. Что это значит и как мы можем это исправить? благодаря!!

Специфическое сообщение об ошибке:

Hangman9.java:10: error: constructor HangmanImages in class HangmanImages cannot be applied to given types; 
    { 
^
    required: String 
    found: no arguments 
    reason: actual and formal argument lists differ in length 
+5

Предоставление точного сообщения об ошибке компиляции было бы полезно. – ekaerovets

+0

Создание 10 подклассов крайне не требуется. Используйте только один подкласс и сохраняйте изображения в массиве изображений. Затем вызовите их по индексу массива. – sbowde4

+0

Hangman9.java:10: error: constructor HangmanImages в классе HangmanImages нельзя применять к заданным типам; { ^ 0: не найдены аргументы причина: фактические и формальные списки аргументов различаются по длине – wowzacode

ответ

0

В одном из ваших конструкторов одного из объектов вы можете добавить слишком много параметров к одному методу. То есть вы вызывали что-то вроде new HangmanImages(i, x), где x - дополнительный параметр, который ваш класс не может распознать.

Кроме того, что-то еще полезно отметить: вам не нужно создавать несколько классов, которые выполняют одну и ту же функцию. Вместо этого вы можете создать один класс HangmanImage, а затем создать массив (или ArrayList, если знаете, как его использовать) HangmanImage. Поступая таким образом, вы можете использовать циклы для работы с объектами HangmanImage, а не вручную вводить их.

Если вам нужен класс Abstract, попробуйте рассмотреть любые типы объектов HangmanImage, которые должны были бы иметь разные методы друг от друга. Например, вы можете создавать производные объекты, которые используют дополнительные функции, например .changeImage(ImageIcon newImage).

0

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

0

Кроме того, в ваших подклассах вы объявляете переменные экземпляра подкласса «imagename» и «imageIcon», которые скрывают переменные суперкласса с тем же именем, и вы также переопределяете метод с именем getImage(). Избавьтесь от этих переменных экземпляра подкласса и метода getImage().

Смежные вопросы

 Смежные вопросы