为什么我收到此运行时异常?

时间:2014-09-03 05:44:16

标签: java arrays interface

我正在开发一个程序,它会将随机数添加到数组中,直到它在数组中放入一个重复的数字,然后它应该打印在生成重复数字之前生成了多少个数字。

当我运行程序时,我收到此错误。

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 log class:

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;
    }

}

5 个答案:

答案 0 :(得分:2)

问题在于IntLogInterface界面(您没有发布)至少包含您尚未在contains(String)中实施的其他方法(ArrayIntLog)类。

您的IDE一直告诉您将abstract关键字添加到ArrayIntLog类,因为类必须实现由已实现的接口继承或定义的所有abstract方法,或者类本身必须宣布abstract并执行&#34;缺失&#34;子类的方法。

显然,直到&#34;失踪&#34;方法没有实现,类无法实例化,因此如果它是ArrayIntLog,你就无法实例化abstract

只需实现IntLogInterface定义的所有方法。

答案 1 :(得分:0)

您应该实现IntLogInterface接口的所有功能

答案 2 :(得分:0)

例外是不言自明的。您必须在contains(String element)课程中实施ArrayIntLog。在实现interface时,需要实现该接口中的所有方法。

答案 3 :(得分:0)

您必须在IntLogInterface中实现所有抽象方法。

它表示“arrayintlog.ArrayIntLog不是抽象的,不会覆盖抽象方法contains(java.lang.String)”。但是,您实施的contains方法具有不同的签名:public boolean contains(int element)

答案 4 :(得分:0)

错误是不言自明的。

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

如果您使用的是界面,请不要忘记实施所有方法。 这样做,你很高兴。