Konsolen eingabe

Susi194

Mitglied
Hi, kann mir jemand erklären warum mir folgender Code bei args.length 0 ausgibt?
Ich lese immer einen String ein und einen integer, was auch super geht jedoch ist args.length immer 0. In der ersten klasse habe ich meine algorithmus geschrieben um eine eingelesene Kreditkartennummer zu checken. Diese Eingabe soll nun von der Konsole erfolgen, es geht auch einlesen aber warum ist args.length 0 ???

Code:
import java.util.*;

public class CheckLuhn {

   public static void main(String[] args) {
      
       System.out.println("Kreditkartennummer eingeben");
       Scanner sc = new Scanner(System.in);
       String kreditkarte = sc.nextLine();
      
       System.out.println("Anzahl Ziffern eingeben");
       int anzahl = sc.nextInt();

       System.out.println(kreditkarte);
       System.out.println(anzahl);
      
       System.out.println(Luhn.check(kreditkarte, anzahl));
      
       System.out.println(args.length);
   }

}

Konsole:

Kreditkartennummer eingeben
4683457829316528
Anzahl Ziffern eingeben
16
4683457829316528
16
true
0
 
was macht den die Methode Luhn.check(kreditkarte, anzahl) ?
Eventuell irre ich, aber du übergibst an die Main-Methode nichts, daher ist String[]args null
 
ich glaube ich verstehs, statts eigene variablen zu deklarien die konsolen eingabe in args[0] und args[1] speichern oder?

ich glaube es soll auch nur dier kreditkartennummer eingelesen werden und die ziffernanzahl ist mit 16 fix
 
hm also die aufgabenstellung ist so:

Schreiben Sie eine Klasse CheckLuhn, die nur ein Hauptprogramm zum Testen der Methode check enthält. Die Kreditkartennummer soll von der Kommandozeile gelesen werden.

Hinweise:

Der Parameter args der Methode main enthält die Kommandozeilenargumente.

Mit args.length kann herausgefunden werden, wie viele Argumente es gibt.

Man erhält die Argumente durch args[0], args[1],

Beispielaufruf: java CheckLuhn 4683457829316528

args.length == 1, args[0] == 4683457829316528

Versteh das leider nicht
 
Dann darfst du die Nummern nicht im Programm einlesen sondern musst es wissen oben beschrieben beim Programmstart als Kommandozeilenargumente angeben. Im Programm kannst du dann über die Länge des Arrays abfragen ob genug Parameter angegeben wurden. Wenn ja kannst du die Werte aus dem Array holen und parsen.
 
ok, jetzt bin ich völlig raus, man startet das programm nu von der Kommandozeile? dieser aufruf java CheckLuhn 4683457829316528 startet mein programm und gibt sofort den kreditkartennummer string mit?

Das habe ich noch in keiner Folie gesehen, komisch dass wir dazu ne aufgabe machen sollen

Wie sähe denn der richtige code nu aus?
 
Hier mal an einem kleinen Beispiel "Foo", welches 2 Parameter bekommt (einen String und eine Zahl) foo Test 2
Java:
public class Foo {
  public static void main(String[] args) {
      if(args.length >= 2) {
           String string = args[0];
           int zahl = Integer.parseInt(args[1]);
           System.out.println("Das ist ein String: " + string + " und das ist eine Zahl: " + zahl);
      }
  }
}
Und diese Ausgabe liefert.
Code:
Das ist ein String: Test und das ist eine Zahl: 2

Damit solltest du eigentlich alles kennen um die Aufgabe zu lösen.
 
ok, aber bei mir hängts auch noch bei der Kommandozeileneingabe. Wir nutzen eigentlich immer eclipse ich muss da noch nachlesen wie man in der cmd kompiliert und das programm startet...
 
Das geht auch bei Eclipse.

Ansonsten mit Command Prompt:
- cd <directory name> //Kannst entweder von directory zu directory oder direkt den ganzen Pfad zum Programm eingeben
- javac <programm>.java
- java <programm name>

Mit Eclipse:
- Run
- Run Configurations
- Arguments
- in "Program Arguments" dann die einzelnen arguments eingeben, jedes durch ein space getrennt.
 
super, dies scanner sc und soweiter brauche ich dann garnicht oder?
das wäre dann wenn man im programm etwas einlesen möchte.

und wenn ich meine 16 einlesen möchte müsste ich sie noch zu einem int konvertieren oder
 
Mit Eclipse:
- Run
- Run Configurations
- Arguments
- in "Program Arguments" dann die einzelnen arguments eingeben, jedes durch ein space getrennt.
Alternativ kann man dort auch ${string_prompt}eintragen. Dann bekommt man bei jedem Start ein Eingabefenster für die Parametereingabe. Kann ganz praktisch sein, wenn man mit unterschiedlichen Eingaben testen möchte.
 
@Susi194
Ja, Scanner ermöglicht es zur Laufzeit Daten einzulesen. Wenn du in deinem Programm diese per Startparameter übergibst, brauchst du den nicht mehr.
Du kannst deine 16stellige Zahl per Startparameter übergeben und sie dann konvertieren. Ein int wird aber hier nicht funktionieren. Kannst du dir denken wieso?
 
naja, der eingabe paramenter ist ja vom Typ String args[], also alles was eingelsen wird wird als string ins array gespeichert, er liest dann die kreditkartennummer an arg[0] ein und meinen int wert an arg[1].

Ich könnte jedoch meine main() in diese form ändern --> public static void main(string nummer,int ianzahl ){...}

dann könnte ich einen string und einen int per kommandozeilenstart einlesen oder?

und meine funktion so aufrufen --> System.out.println(Luhn.check(nummer, anzahl));

hätte noch eine Frage und zwar kann meine mehtode check() leeerzeichen rausfiltern, aber man gar keine leerzeichen einlesen beim starten von der Kommandozeile

als sowas 1234567890123 45 6 nimmt er garnicht meine methode würde die leerzeichen herausfiltern und die ziffern getrennt verarbeiten und eine prüfsumme bilden
 
Zuletzt bearbeitet:
Ah sorry, hab da was missverstanden. Ich dachte du meinst die Kreditkartennummer mit dem: "in int konvertieren". Dass du einen zweiten Wert eingeben möchtest, der die Stellenanzahl darstellt hab ich übersehen.

Du kannst, wie du schon sagtest die Kreditkartennummer als ersten Parameter und die Anzahl anls zweiten Parameter übergeben. Darauf kannst du dann per args[0] und args[1] zugreifen.
Und wenn du die Anzahl als int brauchst kannst du args[1] natürlich in einen int konvertieren.

So funktioniert dann auch: System.out.println(Luhn.check(nummer, anzahl));
Wobei "nummer" dann ein String ist und "anzahl" ein int.

Den Standardeinstiegspunkt eines Java Programms: public static void main(String[] args) kannst du nicht verändern. Ohne diese Methode startet ein Java Programm nicht.
 
Das mit den Leerzeichen geht schon. Du musst beim Programmstart einfach den zusammengehörenden String mit " " umgeben.
Code:
java MeinProgramm erster zweiter "dritter vierter"

Code:
public class MeinProgramm
{
  public static void main(String[] args)
  {
    for(String s : args)
    {
      System.out.println(s);
    }
  }
}

ergibt:
Code:
erster
zweiter
dritter vierter
 

Neue Themen


Zurück
Oben