我是Java的新手,我确信有一种方法可以做到这一点,所以我要问:你可以从班级调用main方法吗?
import java.io.*;
public class Chemicalcommandline {
public void start() {
String instructions = "This program "
+ ""
+ ""
+ ""
+ "";
System.out.println();
System.out.println("Chemical Sign: ");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String chemical = null;
try {
chemical = reader.readLine();
} catch(IOException ioe) {
System.out.println("Error");
}
//start very long if
if (chemical.equals("Ca")) {
System.out.println("Calcium");
}
main();
}
public static void main(String[] args) {
Chemicalcommandline client = new Chemicalcommandline();
client.start();
}
}
我如何调用main以便在获得一个输入后代码不会退出?
答案 0 :(得分:6)
我注意到你试图重复执行main
方法中的内容。
您可以重复调用某些内容,而不是调用main
方法,这被视为一个糟糕的设计决策。
如果您想重复做一些事情,可以使用以下表格:
public static void main(String[] args) {
boolean endCondition = false;
while(!endCondition) {
Chemicalcommndline.start();
endCondition = shouldEndCheck();
}
}
如果您应该停止循环,shouldEndCheck
方法返回true。
如果您想检查有效输入,可以使用以下表格:
public static void main(String[] args) {
String input = "";
do {
input = readInput();
} while (!validInput(input));
processInput(input);
}
readInput
返回用户提供的String
(可能更简单),
validInput
是一个布尔方法,如果您认为输入有效,则返回true
,
并且processInput
是您选择使用有效输入的内容。
我希望这会有所帮助。
答案 1 :(得分:1)
不,你不能以这种方式调用main。在输入读数中使用具有某种形式的终端条件的while循环。
答案 2 :(得分:1)
你为什么要打电话给主?从你的开始方法? !这将以无限递归调用结束。 Main将调用start和start将调用main 虽然如果你坚持这样做,你可以做到以下几点。 了解start方法签名如何更改以及如何将null传递给main。 在你的情况下,这个程序将永远不会结束,除非你在输入“q”或其他东西时编写特殊处理代码来执行“system.exit”。
import java.io.*;
public class Chemicalcommandline {
public static void start() {
String instructions = "This program "
+ ""
+ ""
+ ""
+ "";
System.out.println();
System.out.println("Chemical Sign: ");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String chemical = null;
try {
chemical = reader.readLine();
} catch(IOException ioe) {
System.out.println("Error");
}
//start crazy long if
if (chemical.equals("Ca")) {
System.out.println("Calcium");
}
main(null);
}
public static void main(String[] args) {
Chemicalcommandline.start();
}
}
建议的
import java.io.*;
public class Chemicalcommandline {
public static void start() {
String instructions = "This program "
+ ""
+ ""
+ ""
+ "";
System.out.println(instructions);
System.out.println("Chemical Sign: ");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String chemical = null;
try {
chemical = reader.readLine();
if(chemical.equals("exit")){
System.exit(0);
}
} catch(IOException ioe) {
System.out.println("Error");
}
//start crazy long if
if (chemical.equals("Ca")) {
System.out.println("Calcium");
}
main(null);
}
public static void main(String[] args) {
//Chemicalcommandline client = new Chemicalcommandline();
Chemicalcommandline.start();
}
}
答案 3 :(得分:0)
这是另一个展示几个良好的类设计实践的例子
类构造函数
使用main方法实例化类
使用布尔条件循环,以及关于如何结束循环的语句
import java.io.*;
public class Chemicalcommandline {
//class constructor
public Chemicalcommandline(){
start();
}
public static void start() {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String chemical = null;
Boolean done = false;
while(!done){
String instructions = "This program "
+ ""
+ ""
+ ""
+ "";
System.out.println(instructions);
System.out.println("Chemical Sign: , enter exit to end");
try {
chemical = reader.readLine();
if(chemical.equals("exit")){
done = true;
}
}catch(IOException ioe) {
System.out.println("Error");
}
if (chemical.equals("Ca")) {
System.out.println("Calcium");
}else{
System.out.println("not sure what that is...");
}
}// end while
}//end method start
public static void main(String[] args){
new Chemicalcommandline();
}
}//end class Chemicalcommandline