我真的是Java新手,我确信有一种方法可以做到这一点,所以我要问:你能从类中调用主方法吗?
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,使代码在获得一个输入后不退出?
我注意到你正试图重复做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
是您选择对有效输入执行的操作。
不能这样调用main。在输入读数中使用带有某种形式的结束条件的while循环
为什么要调用main?从你的开始方法?!! 这将以无限递归调用结束。Main将调用start,而start将调用Main不过,如果你坚持这样做,你可以做到以下几点。看看start方法签名是如何变化的,以及我们是如何将null传递给main的。在你的情况下,这个程序将永远不会结束,除非你编写特殊的处理代码来执行"system"。在输入"q"或其他东西时退出。
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();
}
}
下面是另一个例子,它展示了一些好的类设计实践
类构造函数
使用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