Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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);
}
}
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
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.
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
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...
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.
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
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.