2014-09-03 2 views
-1

Я работаю над программой, которая добавит случайные числа в массив до тех пор, пока не поместит в массив дублирующее число, а затем он должен напечатать, сколько чисел было сгенерировано до создания дублирующего номера.Почему я получаю это исключение времени выполнения?

Когда я запускаю программу, я получаю эту ошибку.

Exception in thread "main" java.lang.ExceptionInInitializerError 
    at arrayintlog.TestLuck.main(TestLuck.java:25) 
Caused by: java.lang.RuntimeException: Uncompilable source code - arrayintlog.ArrayIntLog is not abstract and does not override abstract method contains(java.lang.String) in arrayintlog.IntLogInterface 
    at arrayintlog.ArrayIntLog.<clinit>(ArrayIntLog.java:6) 
    ... 1 more 
Java Result: 1 

У меня нет понятия, что означает это исключение. Я только когда-либо делал один интерфейс раньше, и это было почти то же самое, но с массив строк, и у меня не было никаких проблем с ним.

С этим одним netbeans продолжает указывать мне, чтобы добавить абстрактный текст в класс ArrayIntLog, но если я сделаю так, что мой конструктор ArrayIntLog не работает в моем основном классе?

Что я делаю неправильно или не хватает с этим?

Вот мой основной класс

package arrayintlog; 

import java.util.Random; 
import java.util.Scanner; 

public class TestLuck 
{ 

    public static void main(String[] args) 
    { 
     int cycles = 0; 
     String name; 
     int min = 1; 
     int max = 10000; 
     int duplicate; 

     Random rand = new Random(); 
     int random = rand.nextInt(max - min + 1) + min; 

     Scanner in = new Scanner(System.in); 
     System.out.println("What is the name of your Log: "); 
     name = in.next(); 


     ArrayIntLog myLog = new ArrayIntLog(name); 

     for (int index = 0; index <= myLog.size(); index++) 
     { 
      myLog.insert(12); 
      int duplicateCheck = log[index]; 

      if (myLog.contains(duplicateCheck)) 
      { 
       myLog.toString(); 
       System.out.println("It took " + cycles + " cycles to generate duplicate numbers randomly."); 
      } 
      else 
      { 
       cycles++; 
      } 
     }  

    } 

} 

Вот мой массив INT журнала класс:

package arrayintlog; 


public class ArrayIntLog implements IntLogInterface 
{ 
    protected String name; //name of the IntLog 
    protected int[] log; //array that holds the integers 
    protected int lastIndex = -1; 

    //==========================Constructor===================================== 
    public ArrayIntLog(String name, int maxSize) 
    { 
     log = new int[maxSize]; 
     this.name = name; 
    } 

    //==========================Constructor===================================== 
    public ArrayIntLog(String name) 
    { 
     log = new int[100]; 
     this.name = name; 
    } 

    //===========================Insert========================================= 
    public void insert(int element) 
    { 
     lastIndex++; 
     log[lastIndex] = element; 
    } 

    //===========================isFull========================================= 
    public boolean isFull() 
    { 
     if(lastIndex == (log.length - 1)) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    //============================Size========================================== 
    public int size() 
    { 
     return lastIndex + 1; 
    } 

    //===========================Contains======================================= 
    public boolean contains(int element) 
    { 
     int location = 0; 
     while (location <= lastIndex) 
     { 
      if (element == (log[location])) 
      { 
       return true; 
      } 
      else 
      { 
       location++; 
      } 
     } 
     return false; 
    } 

    //=============================Clear======================================== 
    public void clear() 
    { 
     for (int index = 0; index <= lastIndex; index++) 
     { 
      log[index] = null; 
     } 
     lastIndex = -1; 
    } 

    //=============================getName====================================== 
    public String getName() 
    { 
     return name; 
    } 

    public String toString() 
    { 
     String logString = "Log " + name +"/n/n"; 

     for (int index = 0; index <= lastIndex; index++) 
     { 
      logString = logString + (index+1) + ". " + 
        log[index] + "/n"; 
     } 
     return logString; 
    } 

} 

ответ

2

Проблема заключается в том, что IntLogInterface интерфейс (который вы не опубликовали) содержит, по крайней мере, еще один метод (contains(String)), который вы не внедрили в своем ArrayIntLog класс.

Ваш IDE продолжает говорить вам, чтобы добавить abstract ключевое слово в ArrayIntLog класса, потому что класс должен либо реализовать все abstract методы, унаследованные или определенные реализованы интерфейсы, или сам класс должен быть объявлен abstract и оставить реализации «недостающие» методы для подклассов.

Очевидно, что до тех пор, пока «отсутствующие» методы не будут реализованы, класс не может быть создан, поэтому вы не можете создать экземпляр ArrayIntLog, если он равен abstract.

Просто реализуйте все методы, определенные IntLogInterface.

+0

ОК, я должен случайно сделать мой метод String вместо int в моем интерфейсе. Я ценю полное объяснение.извините, я не опубликовал интерфейс для начала. Я точно думал, что не может содержать проблему ... жить и учиться – twjohns29

0

Вы должны выполнять все функции IntLogInterface интерфейса

0

Исключение является само собой разумеющимся. Вы должны реализовать contains(String element) в классе ArrayIntLog. Когда вы реализуете interface, вам необходимо реализовать все методы в этом интерфейсе.

0

Вы должны реализовать все абстрактные методы в IntLogInterface.

В нем говорится, что «arrayintlog.ArrayIntLog не является абстрактным и не отменяет абстрактного метода contains(java.lang.String)». Но у вашего внедренного метода contains есть другая подпись: public boolean contains(int element)

0

Ошибка объяснения.

arrayintlog.ArrayIntLog is not abstract and does not override abstract method contains(java.lang.String) in arrayintlog.IntLogInterface 

Если вы используете интерфейс, не забудьте реализовать все его методы. Сделайте это, и вы хорошо пойдете.

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