如何从课堂内调用main

问题描述 投票:2回答:4

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

java main
4个回答
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
投票

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


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();
}
}  

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
© www.soinside.com 2019 - 2024. All rights reserved.