0 java queue stack exception-handling try-catch
我正在练习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);
}
Run Code Online (Sandbox Code Playgroud)
代码旨在根据用户输入循环并填充空堆栈,然后循环遍历堆栈并在提示时删除每个元素.我输入的第一组是:
[艺术,蝙蝠,猫,码头,眼睛,父亲]
第二组是:
[艺术,蝙蝠,猫,码头,眼睛,父亲,孩子]
我注意到无论我输入多少元素,它最多只能删除4个元素.我想帮助你搞清楚原因.正如你所看到的,我试着玩循环的界限,但无济于事.无论我在哪里开始或绑定,它总是最终只会弹出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());
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 11
这是一个经常被问到的问题.这是您首先学习如何使用调试器的好机会,其次,学习如何逻辑地思考编程问题.
for(int i = 0; i<sStack.size()+1;i++){
remS(sStack);
}
Run Code Online (Sandbox Code Playgroud)
这总是会删除堆栈中的一半项目.通过模拟纸上循环的操作来解决原因,您将很快看到原因.
我的意思的例子.记下:
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...
Run Code Online (Sandbox Code Playgroud)
完成它.
好了,既然您已经了解了问题,那么您将如何解决它?执行此操作的两种标准方法是:(1)首先计数,将结果保存在本地,针对本地进行测试,以及(2)完全删除计数器,因为这是不必要的; 相反,当大小大于零时循环.我更喜欢后一种解决方案; 你变异的变量越少,你在变异中犯的错误就越少.
| 归档时间: |
|
| 查看次数: |
6588 次 |
| 最近记录: |