【问题标题】:How to call main from inside class如何从课堂内部调用main
【发布时间】:2011-09-14 03:33:57
【问题描述】:

我真的是 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 以使代码在获得一个输入后不会退出?

【问题讨论】:

  • 你不想这样做,因为它会导致不必要的递归。只需将其归类为“坏主意”标题并继续。
  • “你能从类中调用 main 方法吗?” 当然,但更好的问题是“你想实现什么?”如果您是 Java 新手,很可能您尝试使用错误的策略来实现这一目标。

标签: java main


【解决方案1】:

我注意到您正在尝试重复执行 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 是您选择对有效输入执行的操作。

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    不,您不能以这种方式调用 main。在输入读数中使用带有某种形式的终端条件的 while 循环。

    【讨论】:

      【解决方案3】:

      为什么要调用main?从你的开始方法? !!这将以无限递归调用结束。 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();
      }
      }  
      

      【讨论】:

        【解决方案4】:

        这是另一个示例,展示了几个良好的类设计实践

        类构造函数

        使用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
        

        【讨论】:

          猜你喜欢
          • 2013-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-19
          • 2014-09-14
          • 1970-01-01
          • 1970-01-01
          • 2019-07-03
          相关资源
          最近更新 更多