Класс Java Stack / класс Палиндром - PullRequest
0 голосов
/ 24 января 2019

Вопрос: Разработайте класс Stack (НЕОБХОДИМО ИМЕТЬ (по крайней мере) методы push, pop и isEmpty) (ТОЛЬКО структура данных, которую вы можете использовать / иметь в своем классе Stack, ДОЛЖНА быть ЧАСОВОЙ Массивом)

Во-вторых, разработайте второй класс Java с именем Palindrome, который в своем методе main получает строку в качестве аргумента командной строки, а затем использует объект Stack для проверки, является ли данная строка палиндромом или нет.

Класс Palindrome был бы ЕДИНСТВЕННЫМ с методом main (), который получает аргумент командной строки (ТОЛЬКО ОДНА СТРОКА БЕЗ ПРОБЕЛОВ) и проверяет, является ли он палиндромом или нет. Это делается путем создания объекта класса Stack и вызова его методов в некоторых частях вашего алгоритма.

Ответ:

public class Stack {

    private int position, capacity;
    private char[] stack;

    public Stack(int n) {
        capacity = n;
        position = -1;
        stack = new char[capacity];
    }

    public void push(char obj) {
        // stack is not full
        position++;
        stack[position] = obj;
    }

    public char pop() {
        // stack is not empty
        char temp = stack[position];
        position--;
        return temp;
    }

    public boolean isEmpty() {
        return position == -1;
    }

    public char peek() {
        return stack[position];
    }

    public boolean isFull() {
        return position == capacity - 1;
    }

}


public class Palindrome {

    public boolean same(char ch1, char ch2) {
        return (ch1 == ch2) ? true : false;
    }

    public boolean palindrom(String s) {
        int len = s.length();
        char token = 0;
        Stack stack = new Stack(len);

        for (int i = 0; i < len; i++) {
            token = s.charAt(i);
            if (token != ' ')
                stack.push(new Character(token));

        }

        for (int j = 0; j < len; j++) {
            token = s.charAt(j);
            if (token != ' ')
                if (!same((Character) (stack.pop()), s.charAt(j)))
                    return false;
        }

        return (stack.isEmpty()) ? true : false;
    }

    public String reverse(String original) {
        String reverse = "";
        int length = original.length();

        for (int i = length - 1; i >= 0; i--)
            reverse = reverse + original.charAt(i);

        return reverse;
    }

    public static void main(String[] a) {
        Palindrome s = new Palindrome();        
        System.out.println( s.palindrom(a[0]) ? "Palindrome" : "Not Palindrome");               
    }
}

Ошибка: исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 0 в Palindrome.main (Palindrome.java:41)

1 Ответ

0 голосов
/ 24 января 2019
System.out.println( s.palindrom(a[0]) ? "Palindrome" : "Not Palindrome");

Возможно, вы не запускаете эту программу из командной строки, поэтому массив a пуст.

Как запустить программу Java из командной строки с аргументами

...