我对如何在Java中为类实现自定义迭代器感到困惑.我需要基本上创建一个ArrayList,而不使用我已经可用的内置库.我理解创建类的基础知识,但是我无法理解如何让Iterator适应所有这些.我有以下内容:
我创建了一个实现可迭代接口的泛型类,它看起来像这样:
public class MyArrayList<T> implements Iterable<T> {
Run Code Online (Sandbox Code Playgroud)
然后我开始创建一个名为MyIterator的类,根据文档的措辞是一个独立的类.这看起来相当简单我创建了一个名为MyIterator的新类,并让它实现了迭代器接口,所以它看起来像这样:
public class MyIterator<T> implements Iterator<T>{
Run Code Online (Sandbox Code Playgroud)
我的困惑在于以下几点.该文档说Iterator需要在它自己的类中,但是如何访问"MyArrayList"中的数据成员以完全实现hasNext()和next().由于底层数组中的数据成员是私有的(因为它们应该是),我没有看到外部类如何完全实现这些方法.我误解了需要什么?通过单独的类它仍然是"MyArrayList"类的一部分,但定义不同?
我希望这有所帮助,正如我所说,我认为我理解我需要什么,我只是不确定我的迭代器适合所有这些.
我目前正在编写一个Java Swing应用程序,它从MYOB数据库文件中读取数据并在表格中显示某些信息.我已经能够成功生成所需的SQL语句,但是我无法添加日期之间的搜索功能(我们的数据库非常大,所以我们试图限制结果).我的一个查询的示例如下(用Java编写):
rs = stmt.executeQuery("SELECT sales.InvoiceNumber, sales.ShipToAddress, sales.Date "
+ "FROM sales, customers "
+ "WHERE sales.CardRecordID = customers.CardRecordID "
+ "AND customers.Name = 'Cash Sales' "
+ "ORDER BY sales.ShipToAddress ASC, sales.Date DESC"
+ ";");
Run Code Online (Sandbox Code Playgroud)
我有两个日期(它们实际上是Java中的字符串,但格式为dd/MM/yyyy).
我已经尝试AND在我WHERE的BETWEEN语句中使用另一个子句,但我从JDBC得到以下错误[MYOB ODBC]Error getting the literal value of right operand.
实际陈述如下:
rs = stmt.executeQuery("SELECT sales.InvoiceNumber, sales.ShipToAddress, sales.Date "
+ "FROM sales, customers "
+ "WHERE sales.CardRecordID = customers.CardRecordID "
+ "AND customers.Name = 'Cash Sales' "
+ …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用迭代器创建一组循环,并且我遇到了一些迭代器算法的问题(我认为这是可能的但是不起作用).
下面是一些代码:
for (list<Term>::iterator itr = final.begin(); itr != final.end(); itr++) {
for(list<Term>::iterator j = itr + 1; j != final.end(); j++) {
cout << itr->term << " " << j->term;
if(itr->term == j->term) {
//Do stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是让j从队列中的下一个位置开始.原因是我不想检查第一个项目.错误本身来自我指定的代码中的部分itr + 1.现在我确定使用指针你可以像这样算术,为什么它不能使用列表迭代器(这基本上是相同的东西?)
我从IDE获得的错误如下:main.cpp:237:48: error: no match for ‘operator+’ in ‘itr + 1’.我再次认为你可以在迭代器上做这种算法,所以我不确定该怎么做才能使这个工作,我可以尝试一个替代实现吗?