我正在尝试编写一个方法public static void removeDownTo(StackX堆栈,长n):它将所有值从堆栈中弹出,但不包括它看到的第一个元素,它等于第二个参数。如果不相等,则将堆栈留空。
我试图通过达到n值弹出堆栈的上半部分来解决问题。但是堆栈未排序,因此会引起一些问题。
public class StackX {
private int maxSize; // size of stack array
private long[] stackArray;
private int top; // top of stack
//--------------------------------------------------------------
public StackX(int s) // constructor
{
maxSize = s; // set array size
stackArray = new long[maxSize]; // create array
top = -1; // no items yet
}
//--------------------------------------------------------------
public void push(long j) // put item on top of stack
{
if (!isFull())
stackArray[++top] = j; // increment top, insert item
else
System.out.println("Can't insert, stack is full");
}
//--------------------------------------------------------------
public long pop() // take item from top of stack
{
if(!isEmpty())
return stackArray[top--]; // access item, decrement top
else
System.out.print("Error: Stack is empty. Returning -1");
return -1;
}
//--------------------------------------------------------------
public long peek() // peek at top of stack
{
if (isEmpty()){
System.out.print("stack is empty");
}
return stackArray[top];
}
//--------------------------------------------------------------
public boolean isEmpty() // true if stack is empty
{
return (top == -1);
}
//--------------------
public boolean isFull() // true if stack is full
{
return (top == maxSize-1);
}
//--------------------------------------------------------------
public void removeDownTo (StackX stack, long n){
for(int i = 0; stackArray[i] < n; i++){
stack.pop();
}
for(int j = 0; stackArray[j] <= maxSize; j++){
System.out.println(stackArray[j]);
}
}
}
公共类StackApp {
public static void main(String[] args) {
StackX theStack = new StackX(10); // make new stack
theStack.push(20); // push items onto stack
theStack.push(40);
theStack.push(60);
theStack.push(80);
while( !theStack.isEmpty()){ // until it's empty,
theStack.removeDownTo(theStack, 40);
long value = theStack.pop();
System.out.print(value); // display it
System.out.print(" ");
} // end while
} // end main()
} //结束类StackApp
我希望看到60 80,但我得到6020。
答案 0 :(得分:1)
由于您是编程的新手,因此您的老师给了您一个很容易解决的任务。您应该严格遵守它的话。这些话为您提供主要线索。
您应该定义此方法:
public static void removeDownTo (StackX stack, long n)
在这里,static
一词很重要。这意味着该方法不应进入StackX
类。 (说明中应该在某处提及。)如果您的任务是将方法添加到StackX
类中,则它看起来应该像这样:
public void removeDownTo (long n)
这两种方法之间的区别在于,后者可以访问StackX
类的所有实现细节,它们是变量maxSize
,stackArray
和top
但是您的任务有所不同,您的方法应为static
,这意味着它无权访问这些实现详细信息。您所能做的就是调用标记为public
的方法。其中有5个,它们都以小写字母开头。如您所写,仅使用这5种方法,就应该解决这个难题:
它将所有值从堆栈中弹出,但不包括所看到的第一个与第二个参数相等的元素。如果没有相等,则将堆栈留空。
通过列出上面的5种方法,您可以看到堆栈仅允许很少的操作。想想一堆书。您不能只从中间拿一本书,唯一可以做的就是看书架的顶部。这就是a stack的本质。
您尝试过:
我试图通过达到n值弹出堆栈的上半部分来解决问题。但是堆栈没有排序,因此会引起一些问题。
此任务比您想象的要简单得多。这根本不是关于排序。请更严格地遵循说明中的文字。最后,您的removeDownTo
方法从开始到结束应该有5行长。这意味着花括号内只需要编写3行代码。