Я должен взять предложение, какое бы оно ни было, и положить каждое слово в стопку, а затем распечатать его задом наперед. Таким образом, «Это предложение» станет «SiT si ecnetnes». Я проследил код с примерами типа «abc» и другими вещами и не могу понять, чего мне не хватает, чтобы заставить это работать.
Мои проблемы -
Невозможно получить последнее слово для прохождения стека, потому что оно основано на пробеле (-1) и после того, как это дает выход из цикла.
Как взять стек ираспечатайте его там, где 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;
}
}