使用带有 for 循环整数的堆栈 - 需要使用任意值
Using a stack with a for-loop integer - need to use arbitrary values
我有一个堆栈,它向前和向后读取。我需要能够输入任意值而不是使用整数 (i) --- 我该怎么做呢?我会使用数组吗?
package stacking;
import java.util.*;
/**
* @author Blood Fox
* 2/11/2015
* Stack Class - Learning how to use "Stack" Interfaces.
*
*/
public class StackMain {
//@param args
public static void main(String[] args) {
// Create a new, empty stack
Stack<Integer> stack = new Stack<Integer>();
Integer reversedStack = null;
Integer forwardsStack = null;
//add some items to it
System.out.println("This is forwards:");
for (int i = 0; i <= 0; i++)
{
//stack.push ( new Integer(i) );
forwardsStack = stack.push( new Integer(i));
System.out.print (i + " " );
}
// Last in first out means reverse order - reverse and place it in reversedStack
System.out.println("");
System.out.println("This is backwards:");
//do a loop for while empty --- remove
while ( !stack.empty() )
{
reversedStack = stack.pop();
System.out.print(reversedStack);
System.out.print (" " );
}
//compare both values of the forward and backward values to match and see if it's a palindrome.
if (forwardsStack == reversedStack)
{
System.out.println("");
System.out.println("The stack is a palindrome");
}
if (forwardsStack != reversedStack)
{
System.out.println("");
System.out.println("The stack is NOT a palindrome");
}
// Empty, let's lift off!
System.out.println("");
System.out.println("The stack is now empty");
}
}
我正在考虑使用一个整数 startVal 和一个数组,将 forwardsStack 正确地放置在原始数字堆栈上。我该怎么做?
这里有几点值得说明:
- 您可以使用
Stack<Object>
允许将任何类型的 object 添加到您的堆栈中。这是因为所有 class 都是 Object
. 的子class
- 通常使用
Object
作为 collection 的类型是个坏主意。它通常被误用,允许 collection 包含来自与 instanceof
完全不同的域的 object 和用于处理成员的转换。相反,通常最好声明一个所有成员都将实现的 interface
。
- 说到这一点,在您的情况下,您唯一需要对成员做的事情就是比较它们是否相等。
equals
方法是 Object
class 的一部分,因此您将能够对 Object
成员执行您需要执行的操作。这使其成为声明 Stack<Object>
可能合适的(少数)情况之一。
- 最后请注意,您正在将堆栈与
==
进行比较。这不会做你想要的。它只是检查两个变量是否引用相同的 object 而它们不引用。你应该使用 forwardsStack.equals(reversedStack)
。这使用 equals
. 正确地比较了堆栈的大小和每个成员
我有一个堆栈,它向前和向后读取。我需要能够输入任意值而不是使用整数 (i) --- 我该怎么做呢?我会使用数组吗?
package stacking;
import java.util.*;
/**
* @author Blood Fox
* 2/11/2015
* Stack Class - Learning how to use "Stack" Interfaces.
*
*/
public class StackMain {
//@param args
public static void main(String[] args) {
// Create a new, empty stack
Stack<Integer> stack = new Stack<Integer>();
Integer reversedStack = null;
Integer forwardsStack = null;
//add some items to it
System.out.println("This is forwards:");
for (int i = 0; i <= 0; i++)
{
//stack.push ( new Integer(i) );
forwardsStack = stack.push( new Integer(i));
System.out.print (i + " " );
}
// Last in first out means reverse order - reverse and place it in reversedStack
System.out.println("");
System.out.println("This is backwards:");
//do a loop for while empty --- remove
while ( !stack.empty() )
{
reversedStack = stack.pop();
System.out.print(reversedStack);
System.out.print (" " );
}
//compare both values of the forward and backward values to match and see if it's a palindrome.
if (forwardsStack == reversedStack)
{
System.out.println("");
System.out.println("The stack is a palindrome");
}
if (forwardsStack != reversedStack)
{
System.out.println("");
System.out.println("The stack is NOT a palindrome");
}
// Empty, let's lift off!
System.out.println("");
System.out.println("The stack is now empty");
}
}
我正在考虑使用一个整数 startVal 和一个数组,将 forwardsStack 正确地放置在原始数字堆栈上。我该怎么做?
这里有几点值得说明:
- 您可以使用
Stack<Object>
允许将任何类型的 object 添加到您的堆栈中。这是因为所有 class 都是Object
. 的子class
- 通常使用
Object
作为 collection 的类型是个坏主意。它通常被误用,允许 collection 包含来自与instanceof
完全不同的域的 object 和用于处理成员的转换。相反,通常最好声明一个所有成员都将实现的interface
。 - 说到这一点,在您的情况下,您唯一需要对成员做的事情就是比较它们是否相等。
equals
方法是Object
class 的一部分,因此您将能够对Object
成员执行您需要执行的操作。这使其成为声明Stack<Object>
可能合适的(少数)情况之一。 - 最后请注意,您正在将堆栈与
==
进行比较。这不会做你想要的。它只是检查两个变量是否引用相同的 object 而它们不引用。你应该使用forwardsStack.equals(reversedStack)
。这使用equals
. 正确地比较了堆栈的大小和每个成员