Как позвонить в главный из класса - PullRequest
2 голосов
/ 14 сентября 2011

Я и новичок в 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();
}
}  

КакМогу ли я назвать основной, чтобы код не выходил после получения одного ввода?

Ответы [ 4 ]

6 голосов
/ 14 сентября 2011

Я заметил, что вы пытались многократно делать то, что есть в методе 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 голос
/ 14 сентября 2011

Почему вы хотите позвонить на главную?с вашего метода запуска?!!это закончится бесконечными рекурсивными вызовами.Main вызовет start, а start вызовет main. Если вы будете настаивать на этом, вы можете сделать следующее.Посмотрите, как меняется сигнатура метода start и как мы передаем null в main.В вашем случае эта программа никогда не завершится, если вы не напишите специальный код обработки, чтобы сделать «system.exit» при вводе «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();
}
}  
1 голос
/ 14 сентября 2011

Нет, вы не можете вызвать main таким образом. Используйте цикл while с некоторой формой состояния терминала во входном чтении.

0 голосов
/ 22 сентября 2011

Вот еще один пример, демонстрирующий пару хороших методов проектирования классов

Конструктор класса

Использование метода 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
...