Anzahl Kommandozeilenparamter mittels Methode

maxmuster987

Aktives Mitglied
Java:
import javax.swing.*;
import java.util.*;
import java.io.*;

public class Dateischreiben {

    public static double Py(double v0, double grad, double t) {               
        final int g = 10;
        double Py = v0*Math.sin(Math.toRadians(grad))*t-(1/2.)*g*Math.pow(t,2);
        return Py;                                                             
    }

    public static void main(String[] args) {
        System.out.println("========================================");
        System.out.println("=======Programm zur Wurfberechnung======");
        System.out.println("========================================");   
        
        if (args.length != 3) {
            System.out.println("Zu wenige oder zu viele Kommandozeilenparameter");
            System.exit(0);
        }
        else {
            
            int t, grad, v0;
            
            String eingabe1 = args[0];
            String eingabe2 = args[1];
            String eingabe3 = args[2];
                
            t = Integer.parseInt(eingabe1);
            grad = Integer.parseInt(eingabe2);
            v0 = Integer.parseInt(eingabe3);
                        
            System.out.println("Flugzeit t: \t\t\t " +t +"  [s]");
            System.out.println("Startwinkel alpha: \t\t " +grad +" [\u00B0]");
            System.out.println("Startgeschwindigkeit v0: \t " +v0 +" [m/s]");
            System.out.println("Ergebnisse in Datei Ergebnis.csv geschrieben");
            
            FileWriter fileW;
            try {
                fileW = new FileWriter("Ergebnis.csv");
                
                fileW.write("Berechnung für Flugzeit t = " +t +" [s]:\n");   
                fileW.write("Position in X-Richtung: " +(v0*Math.cos(Math.toRadians(grad))*t) +" [m]\n");
                fileW.write("Position in Y-Richtung: " +Py(v0, grad, t) +" [m]");

                fileW.close();
            }           
            catch (IOException e) {
                System.out.println("Ergebnisse erfolgt, Ergebnis in Ergebnis.csv widerlegt");
            }
        }       
    }
}

Ich hab für vorliegende Aufgabe diesen Code geschrieben, welcher auch soweit 100% funktioniert und ebenfalls korrekt das ausführt, was verlangt ist.
Das einzige Problem: Die Anzahl der Kommandozeilenparamter soll ich mit Hilfe einer Methode lösen und nicht mit args.length.
Wenn nicht exakt 3 Kommandozeilenparameter eingegeben worden sind, dann soll eine Meldung auftauchen, so wie sie im oben stehenden Code erfolgt.

Wie löse ich das jetzt mittels Methode?
 

maxmuster987

Aktives Mitglied
Du hast doch schon eine Methode Py (die man allerdings klein schreibt). Also weißt du doch wie man Methoden verwendet.
Ja, wie man Methoden schreibt weiß ich. Aber wie soll ich das mit der Anzahl der Kommandozeilenparameter realisieren? Für mich war eigentlich args.length die einzige Möglichkeit, die mir zur Realisierung eingefallen ist dazu.
 

Oneixee5

Top Contributor
Du kannst der Methode args übergeben und darin prüfen wie lang args ist.
So wirst du übrigends feststellen, dass dein else-Zweig nicht nötig ist. Nach System.exit(0); ist das Programm zu Ende.
 

Oneixee5

Top Contributor
man kann das sicher noch besser schreiben, ich möchte nur zeigen, dass man mit sinnvollen Benamungen das Programm besser versteht.
Java:
import java.io.FileWriter;
import java.io.IOException;

public class Dateischreiben {

    private static final int GRAVITY = 10;

    public static double positionY(final double startingSpeed, final double startingAngle, final double airTime) {
        return startingSpeed * Math.sin(Math.toRadians(startingAngle)) * airTime
                - 1 / 2. * GRAVITY * Math.pow(airTime, 2);
    }

    public static double positionX(final int startingSpeed, final int startingAngle, final int airTime) {
        return startingSpeed * Math.cos(Math.toRadians(startingAngle)) * airTime;
    }

    private static void validateParameters(final String[] args) {
        if (args.length != 3) {
            System.out.println("Zu wenige oder zu viele Kommandozeilenparameter");
            System.exit(0);
        }
    }

    public static void main(final String[] args) {
        System.out.println("========================================");
        System.out.println("=======Programm zur Wurfberechnung======");
        System.out.println("========================================");

        validateParameters(args);
        final int airTime = Integer.parseInt(args[0]); // NumberFormatException?
        final int startingAngle = Integer.parseInt(args[1]);
        final int startingSpeed = Integer.parseInt(args[2]);

        System.out.println("Flugzeit t: \t\t\t " + airTime + " [s]");
        System.out.println("Startwinkel alpha: \t\t " + startingAngle + " [\u00B0]");
        System.out.println("Startgeschwindigkeit v0: \t " + startingSpeed + " [m/s]");

        try (FileWriter writer = new FileWriter("Ergebnis.csv")) {
            writer.write("Berechnung für Flugzeit t = " + airTime + " [s]:\n");
            writer.write("Position in X-Richtung: " + positionX(startingSpeed, startingAngle, airTime) + " [m]\n");
            writer.write("Position in Y-Richtung: " + positionY(startingSpeed, startingAngle, airTime) + " [m]");
            System.out.println("Ergebnisse in Datei Ergebnis.csv geschrieben");
        } catch (final IOException e) {
            System.out.println("Ergebnisse erfolgt, Ergebnis in Ergebnis.csv widerlegt");
        }

    }

}
 

maxmuster987

Aktives Mitglied
Java:
import javax.swing.*;
import java.util.*;
import java.io.*;

public class Dateischreiben {
   
    public static int kommandozeilenparameter(int args.length) {
        if(args.length!=3) {
            System.out.println("Zu wenige oder zu viele Kommandozeilenparameter");
            System.exit(0);
        }
    }

    public static double Py(double v0, double grad, double t) {              
        final int g = 10;
        double Py = v0*Math.sin(Math.toRadians(grad))*t-(1/2.)*g*Math.pow(t,2);
        return Py;                                                            
    }

    public static void main(String[] args) {
       
        kommandozeilenparameter(args.length);

        System.out.println("========================================");
        System.out.println("=======Programm zur Wurfberechnung======");
        System.out.println("========================================");  
               
            int t, grad, v0;
           
            String eingabe1 = args[0];
            String eingabe2 = args[1];
            String eingabe3 = args[2];
               
            t = Integer.parseInt(eingabe1);
            grad = Integer.parseInt(eingabe2);
            v0 = Integer.parseInt(eingabe3);
                       
            System.out.println("Flugzeit t: \t\t\t " +t +" [s]");
            System.out.println("Startwinkel alpha: \t\t " +grad +" [\u00B0]");
            System.out.println("Startgeschwindigkeit v0: \t " +v0 +" [m/s]");
            System.out.println("Ergebnisse in Datei Ergebnis.csv geschrieben");
           
            FileWriter fileW;
            try {
                fileW = new FileWriter("Ergebnis.csv");
               
                fileW.write("Berechnung fuer Flugzeit t = " +t +" [s]:\n");  
                fileW.write("Position in X-Richtung: " +(v0*Math.cos(Math.toRadians(grad))*t) +" [m]\n");
                fileW.write("Position in Y-Richtung: " +Py(v0, grad, t) +" [m]");

                fileW.close();
            }          
            catch (IOException e) {
                System.out.println("Ergebnisse erfolgt, Ergebnis in Ergebnis.csv widerlegt");
            }
       
    }
}


Meinst du sowas in die Richtung?
Ich erhalte dann im Compiler die Fehlermeldung: Zeile 7: wrong receiver parameter name
public static int kommandozeilenparameter(int args.length) {
 

Neumi5694

Top Contributor
Hier mal was ganz Böses. Das ist ein übler Hack, aber er erfüllt die Aufgabenstellung.
Java:
int count(String... args) {
  int num = 0;
  for (String s : args) {
      num++;
  }
  return num;
}
Es geht noch etwas übler
Java:
int count2(String... args) {
for (int num = 1; num < Integer.POSITIVE_INFINITY; num++) {
  try {
    String s = args[num-1];
  } catch (IndexOutOfBoundsException e) {
    return num-1;
  }
  return -1; //wird nicht passieren
}

Ein etwas einfacher Hack wäre
Java:
int count3(String... args) {
  return Arrays.asList(args).size();
}
 
Zuletzt bearbeitet:

maxmuster987

Aktives Mitglied
Was ist, wenn x-beliebige Kommandozeilenparameter eingegeben werden sollen können, aber nur in einem bestimmten Wertebereich (z.B. kleiner gleich 10 nicht erlaubt und größer 30 auch nicht.
Wie würde ich das realisieren?

Also:
Eingabe in Kommandozeile:

java Uebung1 10 20 30 40

Dann soll er mir eine Fehlermeldung ausspucken und das Programm terminieren, weil 10 und 40 außerhalb des Wertebereichs liegen.
 

KonradN

Super-Moderator
Mitarbeiter
Meinst du sowas in die Richtung?
Deine Antwort wird sich mit der Antwort von @Oneixee5 überschnitten haben - da findest Du ja auch die Methode, so dass Du die richtige Methodensignatur übernehmen kannst.

Die Ideen von @Neumi5694 kannst du evtl. als einen Scherz ansehen - da ein Array ja eine Länge hat, die man abfragen kann, braucht es natürlich keinerlei Code um diese Größe zu bekommen. Also keine Schleife, kein Abfangen von Exceptions und auch kein Umwandeln in eine Liste um da dann die size zu bekommen. Du hast ja schon eine valide Lösung und bis auf das Verschieben in eine Methode ist da ja nichts notwendig.

Und als kleinen Hinweis: Wenn Du eine Entwicklungsumgebung wie IntelliJ nutzt, dann kannst Du das auch die Entwicklungsumgebung machen lassen. Den Part, den Du in einer Methode haben willst, markieren und dann über Rechtsclick Refactor -> Extract Method ... gehen (Kann bei anderen Entwicklungsumgebungen anders heißen) wird dir das alles gleich richtig gemacht.
 

KonradN

Super-Moderator
Mitarbeiter
Was ist, wenn x-beliebige Kommandozeilenparameter eingegeben werden sollen können, aber nur in einem bestimmten Wertebereich (z.B. kleiner gleich 10 nicht erlaubt und größer 30 auch nicht.
Wie würde ich das realisieren?

Also:
Eingabe in Kommandozeile:

java Uebung1 10 20 30 40

Dann soll er mir eine Fehlermeldung ausspucken und das Programm terminieren, weil 10 und 40 außerhalb des Wertebereichs liegen.
Dann musst Du nicht nur die Länge des args Arrays prüfen sondern auch jedes einzelne Element.
Dazu einfach den Parameter zu einem int parsen und prüfen.
 

Jw456

Top Contributor
Eine Frage an den TE sollst du das Prüfen nur in einer Methode machen darfst aber length benutzen.

Oder darfst du das length nicht benutzen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
C Parameter in verschiedenen Anzahl und Typen Java Basics - Anfänger-Themen 6
Ibrahim Anzahl möglicher Reiserouten zurückgeben Java Basics - Anfänger-Themen 5
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
I Eindeutiger String mit maximaler Anzahl an Zeichen Java Basics - Anfänger-Themen 11
nils812 Black Jack Karten Anzahl begrenzen Java Basics - Anfänger-Themen 5
berserkerdq2 sqllite in Java, wenn ich mache select count(*) ..., erhalte ich dann nur die gezählte Anzahl oder werden auch die Tabellen ausgegeben? Java Basics - Anfänger-Themen 2
I Prüfen, ob Anzahl an Monate ein Jahr ergeben Java Basics - Anfänger-Themen 4
B Anzahl Nullen uns Einsen in String ermitteln Java Basics - Anfänger-Themen 3
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
C Anzahl ArrayLists unbekannt Java Basics - Anfänger-Themen 4
O Anzahl Datensätze ausgeben Java Basics - Anfänger-Themen 5
T Maximale Anzahl von Konsonanten im String Java Basics - Anfänger-Themen 6
N Aus einem String die Anzahl der Vokale auslesen Java Basics - Anfänger-Themen 40
W Dez-->Binär mit eigener bit Anzahl Erkennung. Java Basics - Anfänger-Themen 3
RudiRüssel maximale Anzahl von Schlüsseln in einer Hash Tabelle Java Basics - Anfänger-Themen 2
W Anzahl der Zeilen ausgeben lassen Java Basics - Anfänger-Themen 20
J Verschieben von Buchstaben in einem String um vorgegebene Anzahl von Zeichen innerhalb eines weiteren String Java Basics - Anfänger-Themen 12
Kingamadeus2000 Anzahl der Ziffern der kürzesten Zahl aus einem zurückliefern Java Basics - Anfänger-Themen 1
Tino1993 for-Schleife, die eine vorgegebene Anzahl von Zeichen ausgibt Java Basics - Anfänger-Themen 3
M Anzahl Schleifendurchgänge nach x Sekunden anzeigen Java Basics - Anfänger-Themen 2
P Primzahl mit Angabe der höchsten Primzahl und Angabe der Anzahl von Primzahlen bis 100 Java Basics - Anfänger-Themen 8
L Anzahl der benachbarten Minen berechnen und setzen Java Basics - Anfänger-Themen 15
Kirby.exe Anzahl vorkommender Elemente im Array zählen Java Basics - Anfänger-Themen 9
B Nur eine bestimmte Anzahl an Arrays ausgeben Java Basics - Anfänger-Themen 9
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
B Von Array nur eine bestimmte Anzahl bekommen Java Basics - Anfänger-Themen 3
L Anzahl der Paare deren Summe = 0 ergibt berechnen Java Basics - Anfänger-Themen 0
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
L Anzahl der Aufrufe von Schleifen bestimmen Java Basics - Anfänger-Themen 1
D Alle Möglichkeiten, n-Anzahl aus Elementen aus einem Array zu wählen, ausgeben? Java Basics - Anfänger-Themen 23
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4
O ObjectOutputStream Anzahl Objekte festhalten Java Basics - Anfänger-Themen 17
B Anzahl von Stunden / Tage von zwei Datumswerten ermitteln Java Basics - Anfänger-Themen 1
L Dynamische Anzahl an Arrays mit verschiedenen Namen erzeugen Java Basics - Anfänger-Themen 6
H Anzahl verschiedener Buchstaben im String Java Basics - Anfänger-Themen 41
sondr Anzahl der gleichen Positionen im Array Java Basics - Anfänger-Themen 3
Y Konkrete Hilfe gesucht - Anzahl der Stellen einer eingegebenen Zahl überprüfen Java Basics - Anfänger-Themen 5
Y Begrenzte Anzahl an Objekten? Java Basics - Anfänger-Themen 12
P Input/Output Bestimmte Anzahl von Werten in einem Array an Methode übergeben Java Basics - Anfänger-Themen 2
L Graphen: Anzahl Knoten // Knoten in Array speichern Java Basics - Anfänger-Themen 4
E Anzahl Datensätze in Textfeld Java Basics - Anfänger-Themen 5
K Anzahl gleicher Elemente in Array Java Basics - Anfänger-Themen 32
T befehle unterschiedlicher anzahl an strings wiedergeben Java Basics - Anfänger-Themen 2
L Feld mit beliebiger Anzahl von Buchstaben füllen... Java Basics - Anfänger-Themen 5
LikeManuel Anzahl der Teiler Java Basics - Anfänger-Themen 6
D Anzahl von Zahlen bei eingabe begrenzen Java Basics - Anfänger-Themen 37
T Erste Schritte Schreiben Sie eine Klasse Zeit, die eine Zeitdauer in Minuten beschreibt. Die Anzahl Minuten verwalt Java Basics - Anfänger-Themen 3
J Max. Anzahl von Knoten im Binärbaum Java Basics - Anfänger-Themen 3
ralli85 Programm nach einer gewissen Anzahl von Eingaben beenden Java Basics - Anfänger-Themen 15
Z Ausgabe: Anzahl Sterne, danach verringern Java Basics - Anfänger-Themen 7
R Anzahl von Zeichen in einem Char Array Java Basics - Anfänger-Themen 4
A Anzahl der Elemente in einem Stack wiedergeben Java Basics - Anfänger-Themen 3
V Anzahl der Möglichkeiten 20 € zu bezahlen Java Basics - Anfänger-Themen 2
A variable Anzahl an Nutzereinagben Java Basics - Anfänger-Themen 4
stylegangsta Anzahl der gefunden array Werte ausgeben Java Basics - Anfänger-Themen 6
D Variable Anzahl an Buttons per Schleife Java Basics - Anfänger-Themen 7
H Liste ausgeben (Spiel Hey Fisch (software-challenge) ändern Anzahl Fische) Java Basics - Anfänger-Themen 1
M Überschneidende Anzahl von Tagen Java Basics - Anfänger-Themen 4
D Suche nach der Anzahl von Zonen zwischen zwei Punkten Java Basics - Anfänger-Themen 2
S Input/Output Alphabet in eine Datei schreiben und Anzahl von Zeichen ausgeben. Java Basics - Anfänger-Themen 4
I Anzahl der Rechenschritte darstellen lassen Java Basics - Anfänger-Themen 11
C Anzahl bestimmter Zeichen in einem String ausgeben Java Basics - Anfänger-Themen 7
T Anzahl bestimmter Werte eines arrays bestimmen Java Basics - Anfänger-Themen 4
A Rekursion, Anzahl von Stellen ausgeben Java Basics - Anfänger-Themen 7
S Anzahl Quersummen bis zur Einstelligkeit Java Basics - Anfänger-Themen 12
S Anzahl unterschiedlicher Elemente zählen Java Basics - Anfänger-Themen 4
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
R Begrenzer Anzahl von paint() ? Java Basics - Anfänger-Themen 3
J Anzahl von for-Schleifen in Abhängigkeit von Zahleneingabe erzeugen Java Basics - Anfänger-Themen 1
C Beliebige Anzahl Arrays zusammenfügen Java Basics - Anfänger-Themen 5
L Best Practice Alle Kombinationen aus Listenelementen, Anzahl Listen unterschiedlich Java Basics - Anfänger-Themen 6
I Methoden ByteBuffer - Anzahl führender Nullen Java Basics - Anfänger-Themen 3
E Array Anzahl verschiedener Werte ausgeben Java Basics - Anfänger-Themen 3
V Anzahl von gleichen Werten in einem Int-Array ermitteln Java Basics - Anfänger-Themen 4
B Anzahl if anweisungen nicht bekannt Java Basics - Anfänger-Themen 3
T Anzahl der Schritte berechnen Java Basics - Anfänger-Themen 6
R Anzahl der ineinander verschachtelten for-Schleifen von Variable abhängig machen Java Basics - Anfänger-Themen 5
P BitSet- Objekt- Anzahl der Elemente bestimmen Java Basics - Anfänger-Themen 2
B Variablen Unbekante anzahl an Strings splitten und vergleichen Java Basics - Anfänger-Themen 31
M Anzahl Zahlen in String Java Basics - Anfänger-Themen 21
A Threads Minimale und maximale Anzahl. Java Basics - Anfänger-Themen 28
J Bestimmte Anzahl Zeichen aneinander fügen Java Basics - Anfänger-Themen 9
H Anzahl Ziffer in Zahl bestimmen Java Basics - Anfänger-Themen 3
A Anzahl nodes in einem Tree Java Basics - Anfänger-Themen 2
G maximale Anzahl der Tage im Monat Java Basics - Anfänger-Themen 18
G Datentypen Double ausgeben mit minimaler Anzahl Nachkommastellen Java Basics - Anfänger-Themen 3
P Anzahl der else if Operatoren begrenzt?? Java Basics - Anfänger-Themen 7
B genaue Anzahl der Operationen in Schleifen Java Basics - Anfänger-Themen 5
Dit_ Anzahl der Bestellungen grafisch abbilden | Statistisk Java Basics - Anfänger-Themen 6
Luk10 Anzahl der Knoten in einem Baum ausgeben! Java Basics - Anfänger-Themen 6
F Methoden Hanoi - Anzahl der Bewegungen Java Basics - Anfänger-Themen 8
A Counter für die anzahl von regulären ausdrücken Java Basics - Anfänger-Themen 4
M float/double Anzahl Nachkommastellen ermitteln Java Basics - Anfänger-Themen 18
B Anzahl der Werte bestimmen Java Basics - Anfänger-Themen 14
K Sortierung von Anzahl der Wörtern in ArrayList Java Basics - Anfänger-Themen 4
X Anzahl Baumknoten bestimmen Java Basics - Anfänger-Themen 5
K Anzahl Wörter in Zeile Java Basics - Anfänger-Themen 24

Ähnliche Java Themen

Neue Themen


Oben