无清 2016-01-27 06:25 采纳率: 66.7%
浏览 1449
已采纳

java中++a和a++ 在数组实现栈中的小疑问

package 数组实现栈;

public class StackArray implements Stack {
public static final int num = 1024;//数组默认容量
public int capacity;//数组实际容量
public Object s[];//对象数组
public int top = -1;//栈顶元素位置

//构建默认容量栈对象
public StackArray() {
    this(num);
}

//构建指定容量栈对象
public StackArray(int a) {
    capacity = a;
    s = new Object[capacity];
}

//获取栈当前容量
public int getSize() {  
    return(top+1);
}

//判断栈是否为空
public boolean isEmpty() {
    return(top<0);
}

//入栈
public void push(Object obj) throws ExceptionStackFull {
    if(getSize() == capacity) {
        throw new ExceptionStackFull("栈溢出");
    }
    else {
        s[++top] = obj;             // ?????????????  想问下top++为什么不行
    }
}

//取栈顶元素
public Object top() throws ExceptionStackEmpty {
    if(isEmpty()) {
        throw new ExceptionStackEmpty("栈空");
    }
    else {
        return s[top];
    }
}

//出栈
public Object pop() throws ExceptionStackEmpty {
    if(isEmpty()) {
        throw new ExceptionStackEmpty("栈空");
    }
    else {
        Object a = s[top];
        s[top--] = null;           //????????????  出栈时不是把s[top]赋空值吗 怎么是s[top--]
        return a;
    }
}

}

我在用这栈来实现倒置时前面只能是++top 和 top-- 否则出现数组越界
倒置的代码如下
package 数组实现栈;

public class daozhi {
public static void main(String[] args) {
Integer b[] = { 1, 2, 3, 4, 5 };
reverse(b);

    for (int i = 0; i < b.length; i++) {
        System.out.println(b[i]);
    }

}

// 实现数组倒置
public static Integer[] reverse(Integer a[]) {
    StackArray s = new StackArray(a.length);
    // Integer n[] = new Integer[a.length];
    for (int i = 0; i < a.length; i++) {
        s.push(a[i]);
    }
    for (int i = 0; i < a.length; i++) {
        a[i] = (Integer) s.pop();
    }
    return a;
}

}

  • 写回答

4条回答 默认 最新

  • 清泉流 2016-01-27 08:23
    关注

    top++是先取s[top]的值,top再加一,如果使用这个,top一开始是-1,我看上面也没有判断top是否是小于0,所以会出现数组越界

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程