给我的赋值是:创建一个应用程序,通过使用基于链表的堆栈数据结构来反转列表。运行程序时,它会要求您输入输入。按Enter键时,它以相反的顺序显示输入。您这次决定输入数据类型。
我创建了我的Node类或者Link类,我的LinkedList类,LinkedListStack类,现在我被困在main方法中。我在下面发布了所有代码,希望有人帮我找到我正在制作的错误。我查看了其他帖子,但其中大多数都处理了仅仅反转链表,字符串或链表列表arraylist。
这是我不断得到的错误:
time.sleep()
链接列表类
from tkinter import *
import time
import threading
main = Tk()
def threadspawner():
global var1
global var2
print(var1.get(),var2.get())
if var1.get() != 0:
lbl1.start() #<-- starts the spinning wheel to show that something is happening
time.sleep(1) #start doing stuff here
lbl1.stop() #<-- Turns off the spinning wheel
if var2.get() != 0:
lbl2.start() #<-- starts the spinning wheel to show that something is happening
time.sleep(2)
lbl2.stop() #<-- Turns off the spinning wheel
class Loader(Label):
positions_text = '/-\\'
#positions_imgs = [PhotoImage(file='icons\\wheel.gif', format="gif -index "+str(i)) for i in range(3)]
def __init__(self, parent, *args, **kwargs):
kwargs['text']=''
Label.__init__(self, parent, *args, **kwargs)
self.parent = parent
self.runnng = False
self.pos = 0
def start(self):
self.running = True
self.parent.after(0,self.update)
def update(self):
self.config(text = self.positions_text[self.pos])
#self.config(image = self.positions_imgs[self.pos])
self.pos = (self.pos+1)%len(self.positions_text)
#self.pos = (self.pos+1)%len(self.positions_imgs)
if self.running:
self.parent.after(100,self.update)
else:
self.config(text = '✓')
def stop(self):
self.running = False
var1 = IntVar()
chk1 = Checkbutton(main, text='process1', onvalue=2, offvalue=0, variable=var1)
chk1.grid(row=1)
lbl1 = Loader(main) # create an instance of the Loader class
lbl1.grid(row=1, column=1)
var2 = IntVar()
chk2 = Checkbutton(main, text='process2', variable=var2)
chk2.grid(row=2)
lbl2 = Loader(main) # create an instance of the Loader class
lbl2.grid(row=2, column=1)
strt = Button(main, text='Start', command=lambda: threading.Thread(target=threadspawner).start())
strt.grid(columnspan=2)
main.mainloop()
链接堆栈类
Please enter a word: Hello
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1967)
at LinkedStackDemo.main(LinkedStackDemo.java:32)
public class Node
{
public String data;
public Node next;
public Node(String d)
{
data = d;
}
public void displayNode()
{
System.out.println(data + " ");
}
}
我的主要方法(这是我陷入困境的地方)
public class LinkedList
{
public Node first;
public LinkedList()
{
first = null;
}
public boolean isEmpty()
{
return (first == null);
}
public void insertFirst(String d)
{
Node n = new Node(d);
n.next = first;
first = n;
}
public String deleteFirst()
{
//if(first == null)
//{return first;}
Node temp = first;
first = first.next;
//temp.next = null;
//return temp;
return temp.data;
}
public void displayNode()
{
Node current = first;
while(current != null)
{
current.displayNode();
current = current.next;
}
System.out.println(" ");
}
}
我修复了最近的问题,但现在它垂直打印代码而不是水平打印,这是我最近的问题。
这是如何打印出来的,所需的输出就是打印反向像这样,“olleH”请输入一个单词:Hello逆转顺序:H Hello逆转顺序:e H Hello逆转顺序:le H Hello逆转顺序:lle H Hello逆转顺序:olle H你好
取出System.out.println(“”);来自displayNode;没有解决垂直打印的问题。
答案 0 :(得分:1)
这里绝大多数代码与您描述的问题完全无关。唯一相关的是这个:
for (int i = 1; i <= input.length(); i++)
{
while(i<=input.length())
{
String c = input.substring(i,i-1);
s.push(c);
}
//System.out.println("The stack is:\n"+ s);
s.displayStack();
}
您看到的实际问题是将i
和i-1
传递给String.substring
导致的例外情况。正如它在Javadoc中所说的那样(强调我的):
[引发]
IndexOutOfBoundsException
- 如果beginIndex为负数,或者endIndex大于此String对象的长度,或 beginIndex大于endIndex 。
因此,您需要调用其他内容,例如input.substring(i-1, i)
。
但是这里还有另一个问题:您的while
循环永远不会终止,因为i
和input
永远不会改变,因此i<=input.length()
永远不会改变。因此,您只需继续将c
推入堆栈,直到内存不足为止。
这个while
循环根本不需要;删除它。