Java - изучение стеков с использованием предложения строки - PullRequest
0 голосов
/ 21 ноября 2019

Я должен взять предложение, какое бы оно ни было, и положить каждое слово в стопку, а затем распечатать его задом наперед. Таким образом, «Это предложение» станет «SiT si ecnetnes». Я проследил код с примерами типа «abc» и другими вещами и не могу понять, чего мне не хватает, чтобы заставить это работать.

Мои проблемы -

  1. Невозможно получить последнее слово для прохождения стека, потому что оно основано на пробеле (-1) и после того, как это дает выход из цикла.

  2. Как взять стек ираспечатайте его там, где sihT отображается первым, а не последним, а затем следует остальная часть предложения.

Вывод: Фраза - это предложение Длина фразы - 18 Количество - 0 Пробел - 4

Фраза - это предложение Длина фразы - 13 Количество - 1 пробел - 2

Фраза - Предложение Длина фразы - 10 Количество - 2 пробела - 1

Фраза - предложениеДлина фразы - 8 Количество - 3 Пробел - -1

a si sihT

Количество 3 Введите фразу или выйти (XXX):

Код:

    public class StackClassDriver
    {
       public static void main(String[] args)
       {
    //local constants
    final String QUIT = "XXX"; // Sentinel Value for Quitting

    //local variables
    String Phrase;   // User Input for sentence
    int Count;   // Initalize count to zero
    int Space;  // Initalize First Space
    char Test;
    CharStackClass Stack = new CharStackClass();

    /**************************/

    System.out.print ("Enter Sentence: ");
    Phrase = Keyboard.readString ();

    //WHILE (phrase is not the quit value)
    while (!Phrase.equalsIgnoreCase(QUIT))
    {
        //find position of the first space
        Space = Phrase.indexOf(" ");

        // Initalize count to 1
        Count = 0;

        //WHILE(a space was found)
        while (Space != -1)
        {
            // Test output
            System.out.print ("\n\n");
            System.out.println ("Phrase - " + Phrase);
            System.out.println("Phrase Length - " + Phrase.length());
            System.out.println ("Count - " + Count);
            System.out.println ("Space - " + Space);

            for (int Pos = 0; Pos <= Space; Pos++)
            {
                //convert first word to char
                Test = Phrase.charAt(Pos);

                Stack.push(Test);
            }

            //remove the first word and space from the phrase
            Phrase = Phrase.substring(Space + 1);

            //Add 1 to count
            Count ++;

            //find position of the first space
            Space = Phrase.indexOf(" ");

        }//END WHILE

        // Test output
        System.out.print ("\n\n");
        System.out.println ("Phrase - " + Phrase);
        System.out.println("Phrase Length - " + Phrase.length());
        System.out.println ("Count - " + Count);
        System.out.println ("Space - " + Space);

        System.out.print ("\n\n");

        while (!Stack.isEmpty())
        //for (int Pos = 0; Pos < Count; Pos++)
        {

            //return value at top of stack
            Test = Stack.peek( );

            Test = Stack.pop ();

            System.out.print (Test);

        }

        //Clear Screen
        System.out.print("\n\n\n\n");

        System.out.println("Count " + Count);

        //Input phrase or quit value
        System.out.print(Util.setLeft (27, "Enter a Phrase or Quit (XXX): "));
        Phrase = Keyboard.readString();

        }//END WHILE

      }

      }

      public class CharStackClass
      {
      private char stack [];
      private int stackSize;
      private int top;

      public CharStackClass()
      {
      //local constants

      //local variables

     /**************************/

     stackSize = 50;
     stack = new char[stackSize];
     top = 0;

     }
     public CharStackClass(int size)
     {
     //local constants

    //local variables

    /**************************/

    stackSize = size;
    stack = new char[stackSize];
    top = 0;

    }
    public void push(char num)
    {
    //local constants

    //local variables

    /**************************/

    stack[top] = num;
    top++;
    }
    public char pop()
    {
    //local constants

    //local variables
    char temp;

    /**************************/

    top--;
    temp = stack[top];
    return temp;
    }
    public char peek()
    {
    //local constants

    //local variables

    /**************************/

    return stack[top -1];
    }
    public boolean isEmpty()
    {
    //local constants

    //local variables

    /**************************/

    return top == 0;
    }
    public boolean isFull()
    {
    //local constants

    //local variables

    /**************************/

    return top == stackSize;
    }


    }

1 Ответ

0 голосов
/ 22 ноября 2019

Вы можете немного упростить это. Рассмотрим этот псевдокод

pos = 0
while not end of string
    if string[pos] is space
        while stack is not empty
            print stack.pop()
        end-while
        print ' '  // space between words
    end-if
    else
        stack.push(string[pos])
    end-else
    pos = pos + 1
end-while
// at this point, there might be another word on the stack,
// because there was no space at the end of the sentence
while stack is not empty
    print stack.pop()
end-while
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...