从我的 user/main class 控制链表队列,不工作
Controlling a linked list queue from my user/main class, not working
好的,所以我需要创建 queue
(包含入队、出队和 isEmpty 方法)、queueNode
(存储名称、setter 和 getter)和 queueUser
(主要) classes。用户一次输入一个名字。输入 3 个名称后,每个输入的新名称都会将队列的前面踢到屏幕上。此过程将继续,直到用户输入 "quit" 作为名称。一旦发生这种情况,将显示所有剩余名称。除了我的 user/main class,我什么都有了。我似乎无法让它正常工作。它接受 3 个名字,在输入第三个名字后,显示输入的名字。问题是,它停在那里。我需要它继续前进。我觉得我需要一个不同的循环,但我现在被困住了。没有老师的帮助,教科书中没有任何内容,我碰壁了。非常感谢任何帮助或建议。我对 Java 还是很陌生,对数据结构也是全新的。
queueUser
import java.util.Scanner;
public class queueUser {
public static void main(String[] args){
queue qName = new queue();
Scanner input = new Scanner(System.in);
int limit = 3;
String name;
String stop = "quit";
boolean flag = false;
do{
for(int i = 0; i < limit; i++){
System.out.println("Please enter one name: ");
name = input.nextLine();
if(!name.equalsIgnoreCase(stop)){
qName.enqueue(name);
flag = true;
}else{
flag = false;
while(!qName.isEmpty()){
System.out.println(qName.dequeue());
}
}
}
System.out.println(qName.dequeue());
}while(!flag);
}
}
队列
public class queue{
queueNode front, rear;
int count = 0;
public queue(){
front = null;
rear = null;
}
public boolean isEmpty(){
boolean empty = false;
if(front == null){
empty = true;
}else{
empty = false;
}
return empty;
}
public void enqueue(String pName){
queueNode node = new queueNode(pName);
if(isEmpty()){
front = node;
}else{
rear.setNext(node);
}
rear = node;
}
public String dequeue(){
String firstName = null;
if(isEmpty()){
System.out.println("Queue is empty!");
}else{
firstName = front.getName();
front = front.getNext();
}
return firstName;
}
}
queueNode
public class queueNode {
private String name;
private queueNode next;
public queueNode(String pName){
name = pName;
}
public void setNext(queueNode pNext){
next = pNext;
}
public queueNode getNext(){
return next;
}
public void setName(String pName){
name = pName;
}
public String getName(){
return name;
}
}
编辑: 所有这些都适用于您的 QueueUser class。
- 确保您的 class 名称采用 CamelCase。
do-while 循环是多余的,因为标志起始值为 false。您可以通过将其设为 while 循环来完成同样的事情(除非您的教授要求有一个循环)。
while(!flag) {
//do your stuff
}
彻底摆脱for循环
你的原始代码的问题是标志值被调换了,标志已经是 false 所以没有必要在 do-while 循环中声明它。如果你想留下这个多余的部分,它需要是 flag = false。
if(!name.equalsIgnoreCase(stop)){
qName.enqueue(name);
flag = true; //<-----SHOULD BE FALSE if you don't want to break the loop (is redundant)
}else {
flag = false //<-------CHANGE TO TRUE
将 limit 变量设置为 0(或将其重命名为 count 并将其设置为 0)以满足教授想要的计数功能,并在 while 循环中添加一个 if 语句以在达到 3 时出列.
count++
if(count >= 3) {
System.out.println(qName.dequeue());
}
(编辑:你的教授)
在你的循环代码中你是这样说的:
给我三个名字,但如果最近给出的名字是 "quit",我将停止。
在你给我这三个名字之后,我会告诉你排在最前面的是什么。
现在再来一遍。
当您重复循环直到您输入另外 3 个名字时,您不会从队列中移除。即使那样,您也只会使顶部出列,队列中剩下 4 个。
首先,您的队列 class 中有一个从未使用过的变量 int 计数。如果你使用它,它将极大地改进这里的解决方案。当有东西入队时,增加 count 变量。出列时递减。添加一个将 return 计数变量的方法。然后就这样做:
boolean flag = false;
do {
System.out.println("Please enter one name: ");
name = input.nextLine();
if(name.equalsIgnoreCase("stop")) flag = true;
if (!flag) qName.enqueue(name);
if (qName.getCount() > 3) System.out.println(qName.dequeue());
} while (!flag);
for (int x = 0; x < 3; x++) System.out.println(qName.dequeue());
如果您的导师不想要它,那么您的代码应该如下所示:
boolean flag = false;
int count = 0;
do {
System.out.println("Please enter one name: ");
name = input.nextLine();
if (name.equalsIgnoreCase("stop")) flag = true;
if (!flag) {
count++;
qName.enqueue(name);
}
if (count > 3) {
count--;
System.out.println(qName.dequeue());
}
} while (!flag);
for (int x = 0; x < 3; x++) System.out.println(qName.dequeue());
好的,所以我需要创建 queue
(包含入队、出队和 isEmpty 方法)、queueNode
(存储名称、setter 和 getter)和 queueUser
(主要) classes。用户一次输入一个名字。输入 3 个名称后,每个输入的新名称都会将队列的前面踢到屏幕上。此过程将继续,直到用户输入 "quit" 作为名称。一旦发生这种情况,将显示所有剩余名称。除了我的 user/main class,我什么都有了。我似乎无法让它正常工作。它接受 3 个名字,在输入第三个名字后,显示输入的名字。问题是,它停在那里。我需要它继续前进。我觉得我需要一个不同的循环,但我现在被困住了。没有老师的帮助,教科书中没有任何内容,我碰壁了。非常感谢任何帮助或建议。我对 Java 还是很陌生,对数据结构也是全新的。
queueUser
import java.util.Scanner;
public class queueUser {
public static void main(String[] args){
queue qName = new queue();
Scanner input = new Scanner(System.in);
int limit = 3;
String name;
String stop = "quit";
boolean flag = false;
do{
for(int i = 0; i < limit; i++){
System.out.println("Please enter one name: ");
name = input.nextLine();
if(!name.equalsIgnoreCase(stop)){
qName.enqueue(name);
flag = true;
}else{
flag = false;
while(!qName.isEmpty()){
System.out.println(qName.dequeue());
}
}
}
System.out.println(qName.dequeue());
}while(!flag);
}
}
队列
public class queue{
queueNode front, rear;
int count = 0;
public queue(){
front = null;
rear = null;
}
public boolean isEmpty(){
boolean empty = false;
if(front == null){
empty = true;
}else{
empty = false;
}
return empty;
}
public void enqueue(String pName){
queueNode node = new queueNode(pName);
if(isEmpty()){
front = node;
}else{
rear.setNext(node);
}
rear = node;
}
public String dequeue(){
String firstName = null;
if(isEmpty()){
System.out.println("Queue is empty!");
}else{
firstName = front.getName();
front = front.getNext();
}
return firstName;
}
}
queueNode
public class queueNode {
private String name;
private queueNode next;
public queueNode(String pName){
name = pName;
}
public void setNext(queueNode pNext){
next = pNext;
}
public queueNode getNext(){
return next;
}
public void setName(String pName){
name = pName;
}
public String getName(){
return name;
}
}
编辑: 所有这些都适用于您的 QueueUser class。
- 确保您的 class 名称采用 CamelCase。
do-while 循环是多余的,因为标志起始值为 false。您可以通过将其设为 while 循环来完成同样的事情(除非您的教授要求有一个循环)。
while(!flag) { //do your stuff }
彻底摆脱for循环
你的原始代码的问题是标志值被调换了,标志已经是 false 所以没有必要在 do-while 循环中声明它。如果你想留下这个多余的部分,它需要是 flag = false。
if(!name.equalsIgnoreCase(stop)){ qName.enqueue(name); flag = true; //<-----SHOULD BE FALSE if you don't want to break the loop (is redundant) }else { flag = false //<-------CHANGE TO TRUE
将 limit 变量设置为 0(或将其重命名为 count 并将其设置为 0)以满足教授想要的计数功能,并在 while 循环中添加一个 if 语句以在达到 3 时出列.
count++ if(count >= 3) { System.out.println(qName.dequeue()); }
(编辑:你的教授)
在你的循环代码中你是这样说的:
给我三个名字,但如果最近给出的名字是 "quit",我将停止。 在你给我这三个名字之后,我会告诉你排在最前面的是什么。 现在再来一遍。
当您重复循环直到您输入另外 3 个名字时,您不会从队列中移除。即使那样,您也只会使顶部出列,队列中剩下 4 个。
首先,您的队列 class 中有一个从未使用过的变量 int 计数。如果你使用它,它将极大地改进这里的解决方案。当有东西入队时,增加 count 变量。出列时递减。添加一个将 return 计数变量的方法。然后就这样做:
boolean flag = false;
do {
System.out.println("Please enter one name: ");
name = input.nextLine();
if(name.equalsIgnoreCase("stop")) flag = true;
if (!flag) qName.enqueue(name);
if (qName.getCount() > 3) System.out.println(qName.dequeue());
} while (!flag);
for (int x = 0; x < 3; x++) System.out.println(qName.dequeue());
如果您的导师不想要它,那么您的代码应该如下所示:
boolean flag = false;
int count = 0;
do {
System.out.println("Please enter one name: ");
name = input.nextLine();
if (name.equalsIgnoreCase("stop")) flag = true;
if (!flag) {
count++;
qName.enqueue(name);
}
if (count > 3) {
count--;
System.out.println(qName.dequeue());
}
} while (!flag);
for (int x = 0; x < 3; x++) System.out.println(qName.dequeue());