我正在尝试使用ANTLR树命令和递归遍历树.我目前的代码是:
public void traverseTree(Tree tree){
int counter = 0;
System.out.println(tree.toString());
if (tree.getChildCount() > 0 && tree.getChild(0) != null){
System.out.println(tree.toString() + counter++);
tree = tree.getChild(0);
traverseTree(tree);
}
while (tree.getParent().getChild(tree.getChildIndex() + 1) != null){
System.out.println(tree.toString() + counter++);
tree = tree.getParent().getChild(tree.getChildIndex() + 1);
traverseTree(tree);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它没有用.我在树中获得了很多条目,但没有明显的顺序.谁能看到我哪里出错了?
谢谢.
编辑:
我在下面做的评论应该是从这里开始的:
对不起,我应该删除打印语句,他们只是尝试调试它.我遇到的问题是它应该只搜索它开始的节点和该节点的任何兄弟节点,它不应该上升到一个级别,但确实如此,它会打印所有内容.(我将这个编辑成主要的,应该一直在那里开始,抱歉).
我设法最终使代码工作如下:
public void traverseTree(Tree tree){
System.out.println(tree);
if (tree.getChild(0) != null){
traverseTree(tree.getChild(0));
}
if(tree.getParent().getChildCount() > 1){
if(tree.getParent().getChild(tree.getChildIndex() + 1) != null)
traverseTree(tree.getParent().getChild(tree.getChildIndex() + 1));
}
}
Run Code Online (Sandbox Code Playgroud) 很抱歉这个名字非常模糊,我不太清楚如何更具体.
我在C++中使用C#包,C++代码报告错误,但我不确定为什么.
C#代码:
subwindowKit.SetBackground(Subwindow.Background.Transparent);
Run Code Online (Sandbox Code Playgroud)
C++代码:
subwindowKit->SetBackground(Csharppackage::Subwindow.Background.Transparent);
Run Code Online (Sandbox Code Playgroud)
哪个给出错误"不允许输入名称"(同时引用"Csharppackage :: Subwindow").
类似的语法早先工作,但我不确定为什么它不在这里.
我正在尝试计算平面多边形的中心,并想知道解决这个问题的最佳方法是什么。
我可以访问形成多边形的顶点,但没有其他权限。
有没有人对如何解决这个问题有任何建议?
谢谢。
我正在尝试通过 VLC 在 PyQt 中的帧中播放视频,我在这里遵循了类似的问题来获取要使用的示例代码:
class VideoPlayer(QMainWindow):
def __init__(self, parent, inputPath):
super(VideoPlayer, self).__init__(parent)
self.setWindowTitle("Media Player")
# creating a basic vlc instance
self.instance = vlc.Instance()
self.mediaplayer = self.instance.media_player_new()
##########video frame
self.videoframe = QFrame(
frameShape=QFrame.Box, frameShadow=QFrame.Raised
)
if sys.platform.startswith("linux"): # for Linux using the X Server
self.mediaplayer.set_xwindow(self.videoframe.winId())
elif sys.platform == "win32": # for Windows
self.mediaplayer.set_hwnd(self.videoframe.winId())
elif sys.platform == "darwin": # for MacOS
self.mediaplayer.set_nsobject(self.videoframe.winId())
central_widget = QWidget()
self.setCentralWidget(central_widget)
lay = QVBoxLayout(central_widget)
lay.addWidget(self.videoframe)
filename = inputPath
media = self.instance.media_new(filename)
self.mediaplayer.set_media(media)
self.mediaplayer.play()
Run Code Online (Sandbox Code Playgroud)
每当我启动它时,尝试运行它只会给我这些错误:
[0c92dc18] mmdevice …Run Code Online (Sandbox Code Playgroud) 因此,我正在尝试编写一个包含两个微调器和一个按钮的活动,当选择了两个微调器并按下按钮时,它将带您进入另一个活动.除了一个组合,它应该产生一个Toast,说你不能这样做.
无论如何,这是代码:
public void onClick(View v) {
String spinnerchoice1 = ("spinner1Value");
String spinnerchoice2 = ("spinner2Value");
if((spinnerchoice1.equals("Walking")) && (spinnerchoice2.equals("Hiking"))){
Toast.makeText(getBaseContext(), "I'm sorry, this is not possible.", Toast.LENGTH_LONG).show();
}else{
Intent i = new Intent(GetDirections.this.getApplicationContext(), DirectionDisplay.class);
i.putExtra("spinner1Value", transportSpinner.getSelectedItem().toString());
i.putExtra("spinner2Value", locationSpinner.getSelectedItem().toString());
GetDirections.this.startActivity(i);
}
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我哪里出错了?
谢谢
所以我有一个函数,它接受2个不同的输入.
然而,我遇到了这种情况,我偶尔需要第三次输入.大多数时候我不这样做.
我目前的解决方案是我想要使用的实际功能仅由其他2个函数调用.这两个函数具有相同的名称,但是1接受3个输入而另外2个(在调用原始函数之前,这个函数只在第三个输入中设置一个空值).
这很有效,但感觉可能有更好的方法来处理这类问题.我唯一的另一个解决方案是每次调用第一个函数时声明第三个输入的空值,但这看起来更加混乱.
有一个更好的方法吗?我编写它的方式不好吗?