我正在开发一个程序,它会将随机数添加到数组中,直到它在数组中放入一个重复的数字,然后它应该打印在生成重复数字之前生成了多少个数字。
当我运行程序时,我收到此错误。
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;
}
}
答案 0 :(得分:2)
问题在于IntLogInterface
界面(您没有发布)至少包含您尚未在contains(String)
中实施的其他方法(ArrayIntLog
)类。
您的IDE一直告诉您将abstract
关键字添加到ArrayIntLog
类,因为类必须实现由已实现的接口继承或定义的所有abstract
方法,或者类本身必须宣布abstract
并执行&#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
如果您使用的是界面,请不要忘记实施所有方法。 这样做,你很高兴。