Я новичок здесь и в программировании. Я пытаюсь изучить другие темы самостоятельно, так как моему инструктору не хватает помощи, когда у меня возникает вопрос, так что вот оно. Я хочу обратить вспять слово с общим стеком.Реверсирование слова со стеком
My pop, push, isEmpty и peek методы работают (я тестировал их с более простой программой, которую я сделал, прежде чем я попробовал ее на этом.), И результат, кажется, дает мне обратный символ слова char, но всегда давая мне нуль перед каждым символом!
Мои вопросы: Почему это происходит? И хотя у меня есть метод expandCapacity для работы, когда емкость составляет 9, но она не применяется, когда вход проходит лимит.
Вот мой код
package Stack;
import java.util.Scanner;
public class ReverseDriver<T> {
private static String out;
private static String in;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter your sentence: ");
in = input.nextLine();
int size = in.length();
ArrayStack<Character> revStack = new ArrayStack<>(size);
for (int i = 0; i < in.length(); i++) {
char u = in.charAt(i);
revStack.Push(u);
if (in.length() > 9) {
revStack.expandCapacity();
}
}
while (!revStack.IsEmpty()) {
char u = revStack.Pop();
out = out + u;
System.out.flush();
System.out.print(out);
}
}
}
Вот выход
run:
Enter a word:
word
nullr
nullro
nullrow
Exception in thread "main" java.lang.NullPointerException
at Stack.ReverseDriver.main(ReverseDriver.java:37)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)
EDIT: вот методы, которые я сказал, что работали.
@Override
public void Push (T element)
{
if (count == stack.length){
expandCapacity();
}
stack[++count] = element;
//System.out.println(count);
}
@Override
public String toString()
{
String result = "<top of stack>\n";
for (int index=count-1; index >= 0; index--){
result += stack[index] + "\n";
}
return result + "<bottom of stack>";
}
@Override
public boolean IsEmpty()
{ //Checks if array is empty
if(count == 0){
System.out.println("Nothing");
}
return count == 0;
}
public T Pop()
{
T output;
output = (stack[count - 1]);
count--;
return(output);
}
@Override
public T Peek()
{
//looks at the object at the top of this stack without removing it
//from the stack.
if(stack.length == 0){
// {
System.out.println("Cant peek a ghost");
}
return(stack[--count]);
}
// else
// {
// System.out.println(stack[count-1]);
// }
// }
@Override
public int Size()
{
//Sets the size of this vector
if(stack.length == 0){
System.out.println("Nothing inside");
}
System.out.println("The array's size is : " + count);
return count;
}
}
Хотя я понимаю, что вы сказали, что это работает, пожалуйста, вы можете дать нам код в методе expandCapacity и IsEmpty, просто чтобы дать нам больше понять, почему это happening :) – christopher
Вы уверены, что это тот же код, генерирующий вывод - «Введите слово» vs «Введите предложение» –
примечания: 'expandCapacity' вызывается 10 раз, если' in.length() 'равно 10, это намеренным? Кроме того, 'in' и' out' должны быть более корректными локальными переменными в главном, а не статическом (по крайней мере, если это была «настоящая» программа). – hyde