public class Test2 {
public static void main(String args[])
{
FixedCapacityStackOfStrings s;
s=new FixedCapacityStackOfStrings(100);
while(!StdIn.isEmpty())
{
String item=StdIn.readString();
if(!item.equals("-"))
s.push(item);
else if(!s.isEmpty())
System.out.println(s.pop()+" ");
}
--------------------------------------------------------------
class FixedCapacityStackOfStrings {
private String[] a;
private int N;
public FixedCapacityStackOfStrings(int cap)
{
a=new String[cap];
}
public boolean isEmpty(){
return N==0;
}
public int size()
{
return N;
}
public void push(String item)
{
a[N++]=item;
}
public String pop()
{
return a[--N];
}
private void resize(int max)
{//将大小为N<=max的栈移动到一个新的大小为max的数组中
Item[] temp=(Item[]) new Object [max];
for(int i=0;i<N;i++)
temp[i]=a[i];
a=temp;
//这里为什么第一个要用到for来实现而下面可以直接a=temp?
temp数组比a大不是可以直接temp=a吗?
而且a比temp小为什么可以a=temp?不会出现越界的异常吗
第一个是数组中的元素temp[i]=a[i],如果a的长度比temp小,那就只是替换前a长度的数组元素
下面a=temp是将a的地址指向temp数组所在的位置。想知道详细的搜一下java内存管理
a 和 temp 只是相当于引用(其实就是数组在堆中的地址而已)占用的内存都是一样大的