gpt4 book ai didi

java - 执行问题

转载 作者:行者123 更新时间:2023-11-29 06:13:32 26 4
gpt4 key购买 nike

我已经调试了我的 java 代码。它似乎没有任何语法或逻辑错误。但是当我执行代码时,它不会终止也不会抛出任何错误。任何人都可以帮我解决这个问题吗?

这是我的 shell 脚本 -

echo "Name"
read name
if [ "$name" == "abcd" ]; then
echo "correct name"
else
echo "wrong name"
fi

echo "Password"
read password
if [ "$password" == "pwd" ]; then
echo "Correct password"
else
echo "Wrong password"
fi

echo "City"
read city
if [ "$city" == "bangalore" ]; then
echo "correct city"
else
echo "wrong city"
fi

这是我的java代码-

package Pack;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import expectj.ExpectJ;
import expectj.Spawn;

public class Presentation extends Thread {

public static StringBuffer execute(String cmd, List<Question> questions) {

Utility u = new Utility();
StringBuffer sb = new StringBuffer();
ExpectJ exp = new ExpectJ();
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String answer = null;
cmd = "sh /root/Desktop/details.sh";
try {
Spawn s = exp.spawn(cmd);
Question q = null;
int i = 0;
while (i <= questions.size()) {
System.out.println("iteration " + i);
q = questions.get(i);
try {
if (s.getCurrentStandardOutContents().contains(
q.getQuestion())) {
i++;
}
s.expect(q.getQuestion(), q.timeoutInSec);
if (q.isInteractive) {
System.out.println("Please provide your input: ");
answer = br.readLine();
} else {
if (q.isAnswerEncrypted) {
// TODO: decrypt the answer
} else {
answer = q.getAnswer();
}
}
s.send(answer + "\n");
i++;
try {
s.expectClose(3);
System.out.println("Script completed");
break;
} catch (Exception e) {

}
} catch (Exception e) {
System.out.println("Timeout!!!Please answer "
+ s.getCurrentStandardOutContents());
try {
answer = u.PromptUserForAnswerInCaseOfException();
s.send(answer + "\n");
} catch (IOException ioe) {
System.out.println("IO Exception..");
}
}
}
s.expectClose();
} catch (IOException ioe) {
System.out.println("No more communication due to the lack of data");
} catch (Exception e) {

}
return sb;
}

public static void main(String[] args) {

String cmd = "sh /root/Desktop/details.sh";
List<Question> questions = new ArrayList<Question>();

Question question1 = new Question();
question1.setQuestion("Name");
question1.setIsInteractive(false);
question1.setAnswer("abcd");
question1.setIsAnswerEncrypted(false);

Question question2 = new Question();
question2.setQuestion("Password");
question2.setIsInteractive(true);
question2.timeoutInSec = 5;
question2.setAnswer("pwd");
question2.setIsAnswerEncrypted(false);

Question question3 = new Question();
question3.setQuestion("City");
question3.setIsInteractive(false);
question3.timeoutInSec = 5;
question3.setAnswer("bangalore");
question3.setIsAnswerEncrypted(false);

questions.add(question2);
questions.add(question1);
questions.add(question3);

System.out.println(questions.toString());
try {
execute(cmd, questions);
} catch (Exception e) {
e.printStackTrace();
}
}
}

最佳答案

编辑:关于您的程序:

while (i <= questions.size())敲响警钟。当变量 i等于questions.size()您已经到了列表的末尾。 questions.get(i)将抛出异常,因为您正试图读取列表之外的内容。该条款应为 while (i < questions.size() .

原始消息:这是关于如何调试似乎“陷入循环”的程序的建议:

如果您在像 Eclipse 这样的 IDE 中运行,您可以“暂停”当前正在调试的程序。然后通过查看调用堆栈,您可以看到当前执行点在哪里。如果它在系统方法中,您可以“设置返回”,直到执行点到达您的代码。

关于java - 执行问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5933696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com