如何从类内部调用main



我真的是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是一个布尔方法,如果您认为输入有效,则返回trueprocessInput是您选择对有效输入执行的操作。

不能这样调用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

相关内容

  • 没有找到相关文章

最新更新