gpt4 book ai didi

java - Stack Pop 循环不会弹出所有元素

转载 作者:行者123 更新时间:2023-12-01 06:39:01 27 4
gpt4 key购买 nike

我正在练习 Try-Catch、异常处理以及堆栈和队列,因此虽然代码可能不切实际,但对我的练习很有用。

public class Practice {
public static void main(String args[]){
Stack<String> sStack = new Stack<String>();
Queue<String> sQueue = new LinkedList<String>();
Scanner input = new Scanner(System.in);
String inString = " ";

boolean done = false;
do{
try{
while(!inString.equals("")){
System.out.println("Enter a string: ");
inString = input.nextLine().toString();
addS(sStack,inString);
}
done = true;
}catch(Exception e){}
sStack.pop();
for(int i = 0; i<sStack.size()+1;i++){
remS(sStack);
}

}while(done == false);
}

该代码的目的是根据用户输入循环并填充一个空堆栈,然后循环堆栈并删除每个元素,同时给出提示。我输入的第一组是:

[艺术、 bat 、猫、 jetty 、眼睛、父亲]

第二组是:

[艺术、 bat 、猫、 jetty 、眼睛、父亲、 child ]

我注意到,无论我输入多少个元素,它最多只会删除 4 个元素。我希望您能帮忙找出原因。正如您所看到的,我尝试调整循环的边界,但无济于事。无论我从哪里开始或绑定(bind),最终都会最多弹出 4 个元素。

我在下面提供的 addS 和 remS 函数

public static void addS(Stack t, String s){
t.push(s);
System.out.printf("%s was added to the stack %s", s, t);
System.out.println();
}

public static void remS(Stack t){

System.out.printf("\n%s has been popped.",t);
t.pop();
System.out.printf("The current elements are now: ");
System.out.print(t);
System.out.printf("The next element to be popped is %s", t.peek());
}

最佳答案

这是一个常见问题。这是一个很好的机会,让您首先学习如何使用调试器,其次学习如何逻辑地思考编程问题。

    for(int i = 0; i<sStack.size()+1;i++){
remS(sStack);
}

这总是会删除堆栈中一半的项目。通过在纸上模拟循环的操作找出原因,您很快就会明白原因。

我的意思的例子。写下:

stack contains A, B, C, D
i is 0
test loop condition: 0 is smaller than 4 + 1, so we enter the loop.
remove item from stack.
stack contains B, C, D
size is 3
execute loop increment: i is now 1
test loop condition: 1 is smaller than 3 + 1, so we enter the loop...

完成它。

<小时/>

好的,既然您了解了问题所在,那么您将如何解决它呢?执行此操作的两种标准方法是:(1)首先计数,将结果保存在本地,然后针对本地进行测试,以及(2)完全删除计数器,因为没有必要;相反,当大小大于零时循环。我更喜欢后一种解决方案;你改变的变量越少,你在改变它们时犯的错误就越少。

关于java - Stack Pop 循环不会弹出所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20557212/

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