创建基于ArrayList的堆栈并在Palindrome检测器中使用

时间:2014-07-22 15:42:07

标签: java arraylist stack palindrome

我需要创建一个myStack类然后用它来测试Palindromes ...我选择创建一个基于ArrayList的堆栈实现。

    import java.util.ArrayList;

    public class myStack<AnyType>{
        private ArrayList<AnyType> arr;

        public myStack(ArrayList<AnyType> a){
            arr = a;
        }

        public void push(AnyType element) {
                    arr.add(element);
        }

        public AnyType pop() {
            if(arr.size() == 0)
            {
                    System.out.println("Stack Underflow");
                    return null;
            }
            else
            {
                    AnyType element = arr.get(arr.size() -1);
                    arr.remove(element);
                    return element;
            }
        }

        public AnyType top() {
            if(arr.size() == 0)
            {
                    System.out.println("Stack Underflow");
                    return null;
            }
            else
                    return(arr.get(arr.size() -1));
        }
   }

然后我在名为Palindrome的课程中使用它(尚未完成)

然而,当我编译时,它告诉我 “注意:Palindrome.java使用未经检查或不安全的操作。 注意:使用-Xlint重新编译:取消选中以获取详细信息。“

当我注释掉myStack m = new myStack(test);

这一行时

它编译,所以我知道这是问题...为什么myStack类会成为问题?是否与我在堆栈类中使用的“AnyType”有关?

3 个答案:

答案 0 :(得分:1)

你的班级myStack。是通用的模板类型<AnyType>,目前正在使用Raw Type(因此警告)。请遵循Java命名约定,并将其重命名为MyStack。然后,将它与类型一起使用(在Java 7及以上diamond operator <>中) -

// myStack m = new myStack(test);
myStack<Character> m = new myStack<>(); // <-- Please use MyStack.

答案 1 :(得分:0)

如果您打算将MyStack类用于任何类型,可以使用通配符“?”。

所以你的MyStack将是无界的通配符类通用类,因此可以保留任何内容。

答案 2 :(得分:0)

我添加一点视角......不直接回答问题..

  1. 堆栈与回文有什么关系?
  2. 泛型是略微先进/可选的概念。首先要学习更重要的事情。所以,如果你想要修复它......但你也可以忽略警告。
  3. 我更倾向于将程序拆分为3个方面 - (a)检查单个字符串是否为回文的方法(b)读取文件中的行的方法(c)方法检查字符串是否仅包含数字和数字
  4. 编写单独的方法来实现每个方法并获得最佳的代码质量,例如通过引用每个的stackoverflow
  5. 将它们连接在一起以使最终程序正常工作
  6. 恕我直言...... Java非常广泛,您需要有意识地推迟像Generics这样的学习内容。 专注于这些:

    1. 面向对象的设计 - 你可以编写一个StringUtil并添加一个 静态方法,如checkPalindrome
    2. 变量和类命名约定(Java开发人员遵循惯例几乎到最后一个字母)
    3. 我会建议你的程序结构:

      • 您的主要课程应命名为 FilePalindromeChecker
      • 使用静态方法创建 StringUtil 类以检查回文: public static boolean checkPalindrome
      • StringUtil 中使用另一种静态方法来检查字母数字: public static boolean checkPalindrome

      快乐的编码!