h*****g 发帖数: 312 | 1 A. Given
interface Iterator {
T next();
boolean hasNext();
}
interface Predicate {
boolean accept(T t);
}
Implement a method that creates an "accept" iterator that returns items
accepted by the passedin pred variable.
Iterator conditionIterator(Iterator input, Predicate pred) {
}
这题撒意思?需要设计模式的背景知识吗? |
p*****2 发帖数: 21240 | |
p*****2 发帖数: 21240 | 3 class NewIterator
{
Iterator input;
Predicate pred;
T next;
boolean valid;
public NewIterator(Iterator _input, Predicate _pred)
{
input=_input;
pred=_pred;
}
public boolean hasNext()
{
if(!valid)
{
while(input.hasNext())
{
T t=input.next();
if(pred.accept(t))
{
next=t;
valid=true;
break;
}
}
}
return valid;
}
public next()
{
T t=null;
if(!valid)
{
hasNext();
}
if(valid)
{
valid=false;
t=next;
}
return t;
}
} |
l*********8 发帖数: 4642 | 4 class ConditionIterater : public Iterator
{
public:
ConditionIterater(Iterator input, Predicate pred)
: m_Input(input), m_Pred(pred), m_HasNext(false)
{
}
T Next()
{
T returnValue = m_Value;
finxNext();
return returnValue;
}
bools hasNext()
{
return m_HasNext;
}
private:
void findNext()
{
m_HasNext = false;
while(m_Input.hasNext())
{
m_Value = m_Input.Next();
if (m_Pred.accept(m_Value) {
m_HasNext = true;
break;
}
}
}
private:
Iterator m_Input;
Predicate m_Pred;
bool m_HasNext;
T m_Value;
}
【在 h*****g 的大作中提到】 : A. Given : interface Iterator { : T next(); : boolean hasNext(); : } : interface Predicate { : boolean accept(T t); : } : Implement a method that creates an "accept" iterator that returns items : accepted by the passedin pred variable.
|
p*****2 发帖数: 21240 | 5
如果一开始调hasNext return false?
【在 l*********8 的大作中提到】 : class ConditionIterater : public Iterator : { : public: : ConditionIterater(Iterator input, Predicate pred) : : m_Input(input), m_Pred(pred), m_HasNext(false) : { : } : T Next() : { : T returnValue = m_Value;
|
l*********8 发帖数: 4642 | 6 恩,看了北京二哥的程序,发现的确应该设置个isValid标志
【在 l*********8 的大作中提到】 : class ConditionIterater : public Iterator : { : public: : ConditionIterater(Iterator input, Predicate pred) : : m_Input(input), m_Pred(pred), m_HasNext(false) : { : } : T Next() : { : T returnValue = m_Value;
|
l*********8 发帖数: 4642 | 7 本想在constructor里面调用 void findNext()的,忘了。
【在 p*****2 的大作中提到】 : : 如果一开始调hasNext return false?
|
l*********8 发帖数: 4642 | 8 根据peking2的程序和建议改一下:)
class ConditionIterater : public Iterator
{
public:
ConditionIterater(Iterator input, Predicate pred)
: m_Input(input), m_Pred(pred), m_HasNext(false)
{
findNext();
}
T Next()
{
if (m_HasNext==false)
throw exception;
T returnValue = m_Value;
fintNext();
return returnValue;
}
inline bools hasNext()
{
return m_HasNext;
}
private:
void findNext()
{
m_HasNext = false;
while(m_Input.hasNext())
{
m_Value = m_Input.Next();
if (m_Pred.accept(m_Value) {
m_HasNext = true;
break;
}
}
}
private:
Iterator m_Input;
Predicate m_Pred;
bool m_HasNext;
T m_Value;
} |
a***g 发帖数: 234 | |
p*****2 发帖数: 21240 | 10
不一定。上边不是有C++的吗?
【在 a***g 的大作中提到】 : 这题是考Java么?
|
a***g 发帖数: 234 | |