gpt4 book ai didi

java - 调用方法完全没有任何作用?

转载 作者:太空宇宙 更新时间:2023-11-04 06:20:17 25 4
gpt4 key购买 nike

所以现在我正在将数组程序转换为链表以完成我的最终作业。然而,当我尝试调用我的方法之一时,我遇到了问题。当用户在 ProcessChoice 中选择选项 3(也有一个 getChoice() 方法)时,它会立即返回到主菜单。这些是与该选择相关的方法。 DispItem() 和 FindItem() 在另一个类中。 ProcessChoice() 位于用户类中。

void DispItem() {
ItemNode current = head;
current = FindItem();
if (current == null) {
System.out.println("\nThe item was not found.\n");
} else current.DispItem();
}

ItemNode FindItem() {
ItemNode current = head;
System.out.println("\nPlease enter the ID of the item you are looking for.\n");
int ID = keyboard.nextInt();
while (current != null) {
if (ID == current.GetItemID()) {
current.DispItem();
} else System.out.println("Error.");
}
return (current);
}

public static void ProcessChoice(int qChoice, InvenLL qMyAcct) {
if (qChoice == 1) {
qMyAcct.DispItems();
} else if (qChoice == 2) {
qMyAcct.AddItem();
} else if (qChoice == 3) {
qMyAcct.DispItem();
}
/*else if (qChoice == 4)
{
qMyAcct.ModifyItem();
}*/
else if (qChoice == 5) {
System.out.println("\nYou have exited the program. The item data will now be saved. Good bye!\n");
}
}

最佳答案

代码的第一个问题是样式。使用 java 的编码约定,它应该如下所示:

void dispItem(){
ItemNode current = head;
current = findItem();
if(current == null){
System.out.println("\nThe item was not found.\n");
}
else current.dispItem();
}

ItemNode findItem(){
ItemNode current = head;
System.out.println("\nPlease enter the ID of the item you are looking for.\n");
int ID = keyboard.nextInt();
while(current != null){
if(ID == current.getItemID()){
current.dispItem();
}
else System.out.println("Error.");
}
return (current);

}

public static void processChoice(int qChoice, InvenLL qMyAcct){
switch(qChoice){
case 1:
qMyAcct.dispItems();
break;
case 2:
qMyAcct.addItem();
break;
case 3:
qMyAcct.dispItem();
break;
case 4:
qMyAcct.modifyItem();
break;
case 5:
System.out.println("\nYou have exited the program. The item data will now be saved. Good bye!\n");
break;
}
}

解决了文体问题后,逻辑错误就变得更加明显。程序中的逻辑错误就在这个循环中:

while(current != null){
if(ID == current.getItemID()){
current.dispItem();
}
else System.out.println("Error.");
}

如前所述,此循环永远不会终止,因为 current 永远不会在循环内更新。

您可能打算做这样的事情:

while(current != null){
if(ID == current.getItemID()){
current.dispItem();
}
else System.out.println("Error.");

current = current.next(); //or whatever function returns the next node.
}

但是,这仍然没有意义。 findItem 不应打印错误或显示列表内容;它应该找到该项目而没有其他。这是业务逻辑与应用程序逻辑混合的结果。

此类事情的正确实现将使链接列表与菜单提示和内容完全分开。事实上,在现实世界中,人们根本不会实现链表——人们会使用java.util.LinkedList。 。我怀疑这不是一个选择,因为这是一项学校作业。但是,您可以退而求其次,使用 java.util.AbstractSequentialList 。如果不允许,则实现 java.util.List你自己,或者至少在该接口(interface)上设计你的链表实现。除此之外,它将是一个 SMOP 来实现必要的菜单结构。

关于java - 调用方法完全没有任何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27475205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com