/**
* Created by unibodydesignn on 11.03.2017.
*/
public interface Enumeration
{
// Returns true if another element in the collection exists
public boolean hasNext();
// Returns the next element in the collection as an Object
public Object getNext(); }
/**
* NameCollection implements a collection of names using
* a simple array.
*/
public class NameCollection
{
String[] names;
//this array will be initiliazed at outside
NameCollection(String[] names)
{
this.names = names;
}
/**
* getEnumeration should return an instance of a class that
implements
* the Enumeration interface where hasNext() and getNext()
* correspond to data stored within the names array.
*/
Enumeration getEnumeration ()
{
}
public boolean hasNext()
{
//i will define this method here
}
public Object getNext()
{
//i will define getNext() here
}
完成方法getEnumeration(),以便它返回一个匿名内部类,该内部类对应于names数组中的名称数组的Enumeration接口 NamesCollection。然后编写一个创建NamesCollection的main方法 带有示例字符串数组的对象,通过此方法检索此类的枚举 getEnumeration(),然后迭代枚举输出每个 使用getNext()方法命名。
我不理解这个问题的概念。我显然不知道该做什么或从哪里开始?我能找到Java的默认hasNext()定义吗? 这不是功课。 它是Absolute Java书籍的编程项目。第13章P3。
答案 0 :(得分:0)
完成方法
getEnumeration()
,以便它返回一个匿名内部类,该内部类对应Enumeration
中名称数组的NamesCollection
接口。
练习的目的似乎是与匿名课程一起工作。 例如,不要像这样创建一个名为的类:
class NamesEnumeration implements Enumeration {
@Override
public boolean hasNext() {
// ...
}
@Override
public Object getNext() {
// ...
}
}
...说明指导您使用匿名类,如下所示:
Enumeration getEnumeration() {
return new Enumeration() {
@Override
public boolean hasNext() {
// ...
}
@Override
public Object getNext() {
// ...
}
};
}
重要的一点是,匿名实现可以使用其范围内可见的变量。最值得注意的是这个例子,
封闭的names
类的NamesCollection
字段。
在NamesCollection
课程中,
您不需要hasNext
和getNext
方法。
所以课程应该是这样的:
public class NameCollection {
final String[] names;
NameCollection(String[] names) {
this.names = names.clone();
}
Enumeration getEnumeration() {
return new Enumeration() {
int currentIndex = 0;
// ^^^^^^^^^^^^ this is a hint for you
@Override
public boolean hasNext() {
// ...
}
@Override
public Object getNext() {
// ...
}
};
}
}
我做了一些小改进,并添加了一些提示,以帮助您完成实施。
最后,练习还要求添加main
方法来练习此课程。那应该是这样的:
public static void main(String[] args) {
String[] sample = {"hello", "world"};
NameCollection namesCollection = new NameCollection(sample);
Enumeration names = namesCollection.getEnumeration();
while (names.hasNext()) {
System.out.println(names.getNext());
}
}
答案 1 :(得分:0)
我不知道你说的那本书,但让我们了解所要求的内容:
您需要做的是创建Enumeration Interface
的实现,我不知道这一章是关于Interfaces
还是Enumarations
。
1: "完成方法getEnumeration(),以便它返回一个匿名内部类,该内部类对应于NamesCollection"中的names数组的Enumeration接口。。
在这里你需要返回Enumeration
接口的实现,问题是要创建一个Anonymous类(但我最喜欢创建一个内部类,也许是私有内部类)。像这样,在NameCollection
类中:
public Enumeration getEnumeration(){
Enumeration enumerat = new Enumeration(){
private int index = 0;
public boolean hasNext(){
return names.length > index;
}
public Object getNext(){
return names[index++];
}
};
return enumerat;
}
该方法返回Enumeration
类的实现,您可以使用该实现遍历传递给NameCollection
类的构造函数的名称数组。
2: "然后编写一个main方法,创建一个带有示例字符串数组的NamesCollection对象,通过getEnumeration()检索此类的Enumeration,然后迭代通过枚举使用getNext()方法输出每个名称" 。
在这里,您只需要为您的实现创建一个测试类:
public class Main {
public static void main(String[] args) {
NameCollection nc = new NameCollection(new String[]{ "Adriane", "Beatriz" });
Enumeration en = nc.getEnumeration();
while( en.hasNext() ){
System.out.printf("Name: %s \n", en.getNext() );
}
}
}