- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
大家好,我是 java 新手,所以我非常感谢对此的任何帮助。好吧,这就是问题所在:我有一个列表类和一个 listNode 类,列表类由名称、firstNode 和lastNode 表示。firstNode 和 lastNode 来自类型 listNode,listNode 由一个对象(例如 data 或 Object o)和一个 nextNode 表示,后者指向列表中的下一个节点,该节点也来自类型 listNode。
列表类:
public class List {
private ListNode firstNode;
private ListNode lastNode;
private String name;
public List() {
this("list");
}
public List(String listName) {
name = listName;
firstNode = lastNode = null;
}
public void insertAtFront(Object insertItem) {
if (isEmpty())
firstNode = lastNode = new ListNode(insertItem);
else
firstNode = new ListNode(insertItem, firstNode);
}
public void insertAtBack(Object insertItem) {
if (isEmpty())
firstNode = lastNode = new ListNode(insertItem);
else
lastNode = lastNode.nextNode = new ListNode(insertItem);
}
public Object removeFromFront() throws EmptyListException {
if (isEmpty())
throw new EmptyListException(name);
Object removedItem = firstNode.data;
if (firstNode == lastNode)
firstNode = lastNode = null;
else
firstNode = firstNode.nextNode;
return removedItem;
}
public Object removeFromBack() throws EmptyListException {
if (isEmpty())
throw new EmptyListException(name);
Object removedItem = lastNode.data;
if (firstNode == lastNode)
firstNode = lastNode = null;
else {
ListNode current = firstNode;
while (current.nextNode != lastNode)
current = current.nextNode;
lastNode = current;
current.nextNode = null;
}
return removedItem;
}
public boolean isEmpty() {
return firstNode == null;
}
public void print() {
if (isEmpty()) {
System.out.printf("Empty %s\n", name);
return;
}
System.out.printf("The %s is : ", name);
ListNode current = firstNode;
while (current != null) {
System.out.printf("%s", current.data);
current = current.nextNode;
}
System.out.println("\n");
}
@Override
public String toString() {
String stk = "(";
if(isEmpty())return "Empty List";
ListNode checkNode = firstNode;
while (checkNode != null) {
stk += checkNode.data.toString()+ " , ";
checkNode = checkNode.nextNode;
}
return stk+")";
}
public ListNode removeAt (int k){
if(k<=0 || k>getLength())
try{
throw new IllegalValues();
}catch(IllegalValues iv){
iv.printStackTrace();
return null;
}
ListNode newNode = firstNode;
if(k==1){
newNode = firstNode;
firstNode = firstNode.nextNode;
return newNode;
}
if(k==2){
newNode = firstNode.nextNode;
firstNode.nextNode = firstNode.nextNode.nextNode;
return newNode;
}
if(k==3){
newNode = firstNode.nextNode;
firstNode.nextNode.nextNode = firstNode.nextNode.nextNode.nextNode;
return newNode;
}
if(k==4){
newNode = firstNode.nextNode;
firstNode.nextNode.nextNode.nextNode = firstNode.nextNode.nextNode.nextNode.nextNode;
return newNode;
}
return newNode;
}
public int getLength(){
ListNode checkNode = firstNode;
int count =0;
while (checkNode != null) {
count++;
checkNode = checkNode.nextNode;
}
return count;
}
}
列表节点类:
public class ListNode {
Object data;
ListNode nextNode;
public ListNode(Object o) {
this(o, null);
}
public ListNode(Object o, ListNode node) {
data = o;
nextNode = node;
}
public Object getObject() {
return data;
}
public ListNode getNext(){
return nextNode;
}
}
这是我正在使用的两个类。 我的问题是removeAt()方法我不知道如何概括它并为所有代码(如for语句)做出一般性答案我只能通过在if语句中单独编写每个案例来使其工作。我需要编写一个 for 循环,以某种方式可以循环抛出 hasNext() 方法。有任何想法吗??提前致谢
最佳答案
好吧,为了删除第 k 个节点(当 k>1 时),您始终应该执行一个节点:
someNode.nextNode = someNode.nextNode.nextNode;
这是您要删除的节点之前的节点,这使其成为第 k-1
个节点。
您可以通过 for 循环找到该节点:
if (k==1) {
ListNode removedNode = firstNode;
firstNode = firstNode.nextNode;
return removedNode;
}
ListNode someNode = firstNode;
for (int i = 1; i < k - 1; i++) {
someNode = someNode.nextNode;
}
ListNode removedNode = someNode.nextNode;
someNode.nextNode = someNode.nextNode.nextNode;
return removedNode;
请注意,k==1 的情况是单独处理的。
关于java - 自定义列表类,如何循环hasNext方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44822676/
有人可以告诉我,如果 (ListIterator it = listIterator(); it.hasNext(); )部分代码应写为 for (ListIterator it = list.lis
我试图调用 hasNext Velocity 模板中的方法,以便根据 foreach 循环中的位置影响行为 - 仅 hasNext没有按照文档工作。 这是 Velocity 用户指南的片段,关于 ha
我正在尝试读取文件并提取最大的数字。我想读完文件,但 hasNext() 一直给我 true 。当我尝试将其更改为 hasNextInt() 时,即使我的字符为整数,它也永远不会进入。如何跳出循环并正
我想使用下面的代码片段来允许用户一次输入四个值,并用空格分隔,在这种情况下,它们将被单独捕获并分配给变量。或者,用户可以一次输入一个值,同时等待每个值之间的提示。如果 if(in.hasNext())
Scanner scanner = new Scanner(System.in); // check if the scanner has a token System.out.pri
我正在一个在线编程竞赛网站上做一道编程题。说明是,当用户有输入要输入时,它应该继续获取用户输入(不是来自文件)。代码大致如下: public static void main(String[] arg
我对以下与 Java OOP 和 Java API/源代码安排有关的情况感到困惑。基于Oracle's Java 8 API , hasNext() 是一个抽象方法,但是我找不到 hasNext()
我正在编写一个迭代器,它通过委托(delegate)给“当前”列表自己的迭代器来迭代列表列表。 (不,我不是,但这是一个简单的例子)。现在,当我到达一个列表的末尾时,我需要更新委托(delegate)
我是 Java 的新手,正在尝试这个问题,我应该输入一对值(两个字符串一次一个),这意味着循环直到我退出使用ctrl z。只有等级将用于开关;该名称只是一个虚拟值。 我的预期输出是: 输入名称:(然后
var intList = Iterator(range(1,10)) println("data"+intList) println(intList.hasNext) 最后一行给出 True,而对于
所以我是编程的初学者,我想弄清楚问题出在哪里 以下函数。问题出在 scan.hasNext() 方法上 我有两个 println 语句(一个在我进行扫描之后,一个在第二种方法上)告诉我 scan.ha
这个问题已经有答案了: Using Mockito with multiple calls to the same method with the same arguments (14 个回答) 已关
我在尝试理解如何循环用户将给出的键盘输入文本行时遇到问题,例如: 阿尼卡 14 丹 16 我想读取每个标记并分配给字符串名称、整数、年龄、字符串名称、整数年龄。以该顺序。然而,这很容易,如果用户输入阿
在迭代器循环中不建议使用 iterator.hasNext() 吗? 例如,我想将值 obj 设置为列表的每个元素。我可以使用以下代码或通过在循环中使用 hasNext() 使其更具可读性。 int
我正在尝试让 Java 使用 hasNext()、hasNextLine() 和 while 循环来计算文本文件中的行数,尽管我似乎是遇到一些麻烦。该程序将持续运行,我相信它陷入了无限循环。如果有人可
我想从 CSV 文件恢复对象。我需要知道扫描仪是否有 2 个下一个值:scanner.hasNext() 问题是我的访问构造函数有两个参数,我需要确保我的 csv 文件中至少还剩下 2 个。 相关代码
我想要使用的日志文件是制表符分隔的,如下所示: 2019-06-06 10:01:02 1.0 2019-06-06 10:25:12 100.0 2019-06-06 11:02:32
我正在尝试在递归方法中使用迭代器。如果列表中没有下一个元素,则应退出该方法。但是,如果光标位于最后一个位置,则使用 iterator.hasNext() 检查返回 true,我除外 false? 有什
我应该编写一个程序来处理用户输入并将其翻译成 Pig Latin 并打印出来。我翻译成 pig 拉丁语的指令是: Pig Latin 是英语,其首辅音移至每个单词的末尾,后跟“ay”。以元音开头的单词
我有一个作业程序,但我无法弄清楚最后的花絮。它需要能够接受一大段“DNA”代码。给出的样本在 100,000+ 范围内。我一开始就写了适合小样本、一行的内容,非常棒。助教告诉我,我应该能够添加一个 w
我是一名优秀的程序员,十分优秀!