Java 堆栈弹出循环不会弹出所有元素

Java 堆栈弹出循环不会弹出所有元素,java,exception-handling,stack,queue,try-catch,Java,Exception Handling,Stack,Queue,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

我正在练习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);
}

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

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



好了,既然你明白了问题所在,你打算如何解决它?实现这一点的两种标准方法是:(1)首先计数,将结果保存在本地,对本地进行测试;(2)完全删除计数器,因为它是不必要的;相反,在大小大于零时循环。我更喜欢后者;你变异的变量越少,你在变异时犯的错误就越少。

这可能与你的求值表达式(i
啊,被埃里克·利珀特打败了。我向你致敬,先生!:)

使用int
i=1
i=0的int。例如
(int i=1;iCal,简明,非常感谢。我必须习惯使用调试器。我想我也会选择后一个选项。对于任何缩小大小的动态数组来说,这似乎是更好的选择?在将for循环更改为While循环后,这一切都会起作用。似乎在删除最后一个元素后出现错误,我会找出ou不过,我不知道该怎么办。再次感谢你。
    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...
import java.io.*;
import java.util.*;

public class Rev
{
public static void main(String args[]) throws IOException
{
Stack<String> v=new Stack<String>();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
 String[] arr=new String[n];
//String str=br.readLine();
for(int i=0;i<n;i++)
{
arr[i]=br.readLine();
 }
 System.out.println("entered data is");
for(int i=0;i<n;i++)
{

System.out.println(arr[i]);
 }
 for(int i=0;i<n;i++)
 {
 v.push(arr[i]);
}
 System.out.println("getting the element");
System.out.println(v.get(1));
v.set(1,"15");
System.out.println(v.get(1));
System.out.println("reversed String is");
for(int i=1;i<=n;i++)
{
System.out.println(v.pop());

  }

 } 
  }