2015-08-13 5 views
7

Ich bin neu in der Programmierung, und ich mache eine App, die nur in der Befehlszeile ausgeführt wird. Ich fand, dass ich einen BufferedReader verwenden konnte, um die Eingaben von der Befehlszeile zu lesen.Erstellen von Befehlen für eine Terminal-App in Java

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
    String Input = ""; 

while (Input.equalsIgnoreCase("Stop") == false) { 
     Input = in.readLine(); 
     //Here comes the tricky part 
    } 

    in.close(); 

Was ich versuche jetzt zu tun ist, einen Weg zu finden verschiedene „Befehle“ zu erstellen, die Sie nur, indem Sie sie in der Befehlszeile verwenden können. Diese Befehle müssen jedoch möglicherweise mehrmals verwendet werden. Muss ich eine Art Command Design Pattern mit einer riesigen Switch-Anweisung verwenden (das scheint mir nicht richtig zu sein)? Ich möchte vermeiden mit einer zusätzlichen Bibliothek.

Kann jemand mit ein bisschen mehr Erfahrung, dass ich versuche, mir zu helfen?

+0

Das wäre der kurze, "statische" und schlecht wartbare Weg, es zu tun. Um es richtig zu machen, damit Befehle "dynamisch" sein können (mit möglichen Flags und solchen, optionalen Parametern), müssen Sie lesen, wie man einen Parser erstellt. Google it ... –

Antwort

4

Man könnte so etwas wie dies versuchen:

public static void main(String[] args) { 
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
    String input = ""; 
    try { 
     while (!input.equalsIgnoreCase("stop")) { 
      showMenu(); 
      input = in.readLine(); 
      if(input.equals("1")) { 
       //do something 
      } 
      else if(input.equals("2")) { 
       //do something else 
      } 
      else if(input.equals("3")) { 
       // do something else 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public static void showMenu() { 
    System.out.println("Enter 1, 2, 3, or \"stop\" to exit"); 
} 

Es empfiehlt sich, Ihre variables niedriger verrohrten zu halten.

Ich würde auch sagen, dass !Input.equalsIgnoreCase("stop") viel besser lesbar ist als Input.equalsIgnoreCase("stop") == false, obwohl beide logisch gleichwertig sind.

0

Wenn es nur darum geht, die Programmparameter zu lesen, können Sie sie einfach hinter dem Java-Anwendungsaufruf hinzufügen und über Ihr args-Argument auf Ihre Hauptmethode zugreifen. Und dann können Sie das Array durchlaufen und nach den Flags suchen, die Ihr Programm akzeptiert.

+0

Nein, ich müsste sie benutzen können, während das Programm läuft, also glaube ich nicht, dass ich Argumente verwenden könnte, oder? –

+0

Nein. Also ist der gepufferte Leser Ihre Wahl. Es sei denn, Sie möchten eine externe Parser-Bibliothek verwenden. (Abhängig von der Größe und professionellen Wartbarkeit Ihrer Software) – M47z3

1

Beginnen wir mit einer unendlichen While-Schleife für das Programm.

while(true) { 
//code here 
} 

hinzufügen, wenn Anweisungen Befehle zu erkennen, und einige andere Dinge.

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Example { 
public static void main(String[] args) throws IOException { 

    while (true) { 
     BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
     String command = ""; 

     command = in.readLine(); 



     // These are your commands. 
     if (command.equalsIgnoreCase("FirstCommand")) { 
      System.out.println("My first Command!"); 
     } else if (command.equalsIgnoreCase("SecondCommand") || command.equals("AlternativeSecondCommand")) { 
      System.out.println("My second command!"); 
     } else if (command.equalsIgnoreCase("ThirdCommand" + "ParameterOne")) { 
      System.out.println("Parameter one of command three!"); 
     } else if (command.equalsIgnoreCase("Stop") || command.equalsIgnoreCase("Exit") 
       || command.equalsIgnoreCase("Quit")) { 
      System.exit(0); 
     } else { 
      System.out.println("Error: Unknown Command"); 
     } 
    } 
} 
} 

Fügen Sie einfach weitere if-Anweisungen für weitere Befehle hinzu.

Es funktioniert gut, und es ist sehr einfach für Anfänger. Versuch es!

+1

Sie vergleichen Strings mit '==' aber Sie sollten dies nicht tun. Verwenden Sie stattdessen 'String # equals (String)'. –

+0

Ok, es ist schon eine Weile her, dass ich Java benutzt habe. Als ich meine erste Terminal-Sache in C++ gemacht habe, habe ich ==;) –

+0

Das ist ganz in Ordnung! :) Du könntest auch equalsIgnoreCase verwenden, aber das ist eine andere Geschichte. –

Verwandte Themen