Java Programm

JavaAnfänger1235

Bekanntes Mitglied
Hallo,
ich will folgendes umsetzen:
Ich will Zahlen in ein Feld speichern und anstatt eine bereits vorhande Zahl mehrmals abzuspeichern, mit zu zählen, wie oft sie vorkommt:

Mein Programm soll 2 Werte per Kommandozeilenparamter enthalten.
Der erste gibt die Größe des Feldes an( Anzahl verschiedener Zahlen), der 2. Die Anzahl einzulesender Zahlen. Es können deutlich mehr Elemente eingelesen werden, als das Feld groß ist, allerdings soll garantiert sein, dass nur höchstens so viele verschiedene Zahlen vorkommen, wie im 1 . Kommandozeilenparamter angeben.
Es soll ausgegeben werden:
Alle Zahlen kommagetrennt und die Anzahl der Vorkommnisse aller Zahlen.

Wie realsiere ich das vor allem die Anzahl der Vorkomnisse aller Zahlen?
 

krgewb

Top Contributor
Du kannst ein zweidimensionales Array mit zwei Spalten und x Zeilen erstellen (alternativ würde natürlich auch eine HashMap gehen).
In der ersten Spalte speicherst du die Zahl und in der zweiten Spalte speicherst du eine 1. Wenn die Zahl später wieder genannt wird erhöhst du den Wert mithilfe von ++.
 
Zuletzt bearbeitet:

JavaAnfänger1235

Bekanntes Mitglied
Mein Programm soll 2 Werte per Kommandozeilenparamter enthalten.
Der erste gibt die Größe des Feldes an( Anzahl verschiedener Zahlen), der 2. Die Anzahl einzulesender Zahlen.

Ich bin neu in Java und habe noch Probleme:

D.h ich habe in meinem String array an der Stelle 0 die Größe des Feldes stehen.
D.h ich lege ein Array an:int zahlenfeld [] = new zahlenfeld[args[0]];

Das funktioniert leider nicht. Wie kriege ich das hin, das mein Array die Länge netsprechend dem Kommandozeilenparameter hat?
 

krgewb

Top Contributor
Wie kriege ich das jetzt hin?

Höchstens so viele verschiedene Zahlen vorkommen, wie im 1 . Kommandozeilenparamter angeben.
Es muss nach jeder Benutzereingabe überprüft werden.
Dazu kannst du eine Hilfsvariable verwenden, die du (immer wenn eine "neue" Zahl eingegeben worden ist) um 1 erhöhst und dann mit args[0] vergleichst.
Um deine Frage komplett beantworten zu können muss ich wissen für welches Konzept du dich entschieden hast.
 
Zuletzt bearbeitet:

JavaAnfänger1235

Bekanntes Mitglied
Code:
import java.io.*;
public class Testklasse {

    public static void main( String[] args) {
      
         int   zahlenfeld[]  = new int [Integer.parseInt(args[0])];
         int anzahl =  Integer.parseInt(args[1]);
       
         BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
         System.out.println("Werte eingeben:")
       
         int [] Werte = new int[anzahl];
         for(int i=0; i<anzahl; i++) {
             
                Werte[i]= Integer.parseInt(ein.readLine());
           }
      
      
      
      
  
    }
  
  
  
  
}

Bin bis jetzt soweit. Was kann ich jetzt machen?
 

JavaAnfänger1235

Bekanntes Mitglied
Es muss nach jeder Benutzereingabe überprüft werden.
Dazu kannst du eine Hilfsvariable verwenden, die du (immer wenn eine "neue" Zahl eingegeben worden ist) um 1 erhöhst und dann mit args[0] vergleichst.
Um deine Frage komplett beantworten zu können muss ich wissen für welches Konzept du dich entschieden hast.
Ich würde es so machen, wie du. Nur beim Umsetzen tue ich mich schwer
 

krgewb

Top Contributor
Aso, ich meine den Ansatz mit 2 eindimensionalen Arrays. Mein Programm ist wsl Quatsch ;(
Da fehlt ein Semikolon:
Java:
System.out.println("Werte eingeben:")

Bei der readLine-methode werden try- und catch-Block verlangt:
Java:
			try {
				Werte[i] = Integer.parseInt(ein.readLine());
			} catch (NumberFormatException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
 

JavaAnfänger1235

Bekanntes Mitglied
Code:
import java.io.*;
public class Testklasse {

    public static void main( String[] args) throws IOException {
       
         int   zahlenfeld[]  = new int [Integer.parseInt(args[0])];
         int anzahl =  Integer.parseInt(args[1]);
        
         BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
         System.out.println("Werte eingeben:");
        
         int [] Werte = new int[anzahl];
         for(int i=0; i<anzahl; i++) {
            
              
                Werte[i]= Integer.parseInt(ein.readLine());
           }
       
       
       
       
       
   
    }
   
   
   
   
}

Habe die Fehler verbessert. Mit dem catch das hatten wir noch nicht leider
 

krgewb

Top Contributor
Ohne try und catch kompiliert es nicht.

So könnte das Programm aussehen (Argumente: 5 10):
Java:
import java.io.*;

public class Testklasse {

    public static void main(String[] args) {

        int zahlenfeld[] = new int[Integer.parseInt(args[0])];
        int anzahl = Integer.parseInt(args[1]);

        BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Werte eingeben:");

        int[] werte = new int[anzahl];

        for (int i = 0; i < anzahl; i++) {

            try {
                int eingegebeneZahl = Integer.parseInt(ein.readLine());

                if (eingegebeneZahl == 0) {
                    System.out.println("Fehler. Es wurde 0 eingegeben.");
                    return;
                }

                boolean zahlGibtEsBereits = false;

                // Es wird geschaut, ob es die Zahl bereits gibt.
                for (int k = 0; k < zahlenfeld.length; k++) {
                    if (zahlenfeld[k] == eingegebeneZahl) {
                        // Die Zahl gibt es bereits. Der Wert wird also um 1
                        // erhoeht.
                        werte[k] = werte[k] + 1;
                        // k wird geaendert damit die Schleife nicht mehr
                        // durchgelaufen wird.
                        k = zahlenfeld.length;
                        zahlGibtEsBereits = true;
                    }
                }

                if (zahlGibtEsBereits == false) {

                    int hoechsterIndexVonFreiemFeld = -1;

                    for (int k = 0; k < zahlenfeld.length; k++) {
                        if (zahlenfeld[k] == 0) {
                            hoechsterIndexVonFreiemFeld = k;
                        }
                    }

                    // Falls kein Feld frei ist bedeutet das, dass args[0]
                    // sozusagen
                    // ausgeschoepft ist.
                    if (hoechsterIndexVonFreiemFeld == -1) {
                        // Mache nichts
                    }
                    // Falls das Array noch freie Felder hat wird die Zahl
                    // eingefuegt.
                    else {
                        zahlenfeld[hoechsterIndexVonFreiemFeld] = eingegebeneZahl;
                        werte[hoechsterIndexVonFreiemFeld] = 1;
                    }

                }

            } catch (NumberFormatException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        System.out.println("\nErgebnisse:");

        for (int i = 0; i < zahlenfeld.length; i++) {
            if (zahlenfeld[i] != 0 && werte[i] != 0) {
                System.out.println(zahlenfeld[i] + ", " + werte[i]);
            }
        }

    }

}

Code:
Werte eingeben:
1
1
3
88
99
44
67
32
88
653

Ergebnisse:
44, 1
99, 1
88, 2
3, 1
1, 2
Wobei ich noch nicht weiß, wieso die Elemente in falscher Reihenfolge gespeichert sind.
 

JavaAnfänger1235

Bekanntes Mitglied
Vielen lieben Dank:) Ich gehe es mal durch und versuche zu verstehen was du gemacht hast.

Wenn ich das schreibe: public static void main( String[] args) throws IOException { kompiliert es
 

krgewb

Top Contributor
Wenn du die Arrays erstellt sind sie von vornherein mit Nullen gefüllt. Das nutze ich aus, um zu gucken, ob ein Feld eine vom Benutzer eingegebene Zahl enthält.
 
Zuletzt bearbeitet:

krgewb

Top Contributor
Bei einer length von 10 wird die Schleife 10 mal durchlaufen, k geht dann von 0 bis 9. Wenn ich also will dass die Schleife vorzeitig abgebrochen wird muss ich k einfach auf 10 setzen.

Ich weiß jetzt, wie es eleganter geht (mithilfe von break):
Java:
            // Es wird geschaut, ob es die Zahl bereits gibt.
            for (int k = 0; k < zahlenfeld.length; k++) {
                if (zahlenfeld[k] == eingegebeneZahl) {
                    // Die Zahl gibt es bereits. Der Wert wird also um 1
                    // erhoeht.
                    werte[k] = werte[k] + 1;
                    zahlGibtEsBereits = true;
                    break;
                }
            }
 

krgewb

Top Contributor
Ich weiß jetzt, wieso die Reihenfolge falsch war. Ich habe nun hoechsterIndexVonFreiemFeld zu niedrigsterIndexVonFreiemFeld geändert und break eingefügt.
Java:
import java.io.*;

public class Testklasse {

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

        int zahlenfeld[] = new int[Integer.parseInt(args[0])];
        int anzahl = Integer.parseInt(args[1]);

        BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Werte eingeben:");

        int[] werte = new int[anzahl];

        for (int i = 0; i < anzahl; i++) {

            int eingegebeneZahl = Integer.parseInt(ein.readLine());

            if (eingegebeneZahl == 0) {
                System.out.println("Fehler. Es wurde 0 eingegeben.");
                return;
            }

            boolean zahlGibtEsBereits = false;

            // Es wird geschaut, ob es die Zahl bereits gibt.
            for (int k = 0; k < zahlenfeld.length; k++) {
                if (zahlenfeld[k] == eingegebeneZahl) {
                    // Die Zahl gibt es bereits. Der Wert wird also um 1
                    // erhoeht.
                    werte[k] = werte[k] + 1;
                    zahlGibtEsBereits = true;
                    break;
                }
            }

            if (zahlGibtEsBereits == false) {

                int niedrigsterIndexVonFreiemFeld = -1;

                for (int k = 0; k < zahlenfeld.length; k++) {
                    if (zahlenfeld[k] == 0) {
                        niedrigsterIndexVonFreiemFeld = k;
                        break;
                    }
                }

                // Falls kein Feld frei ist bedeutet das, dass args[0]
                // sozusagen
                // ausgeschoepft ist.
                if (niedrigsterIndexVonFreiemFeld == -1) {
                    // Mache nichts
                }
                // Falls das Array noch freie Felder hat wird die Zahl
                // eingefuegt.
                else {
                    zahlenfeld[niedrigsterIndexVonFreiemFeld] = eingegebeneZahl;
                    werte[niedrigsterIndexVonFreiemFeld] = 1;
                }

            }

        }

        System.out.println("\nErgebnisse:");

        for (int i = 0; i < zahlenfeld.length; i++) {
            if (zahlenfeld[i] != 0 && werte[i] != 0) {
                System.out.println(zahlenfeld[i] + ", " + werte[i]);
            }
        }

    }

}

Code:
Werte eingeben:
1
1
3
88
99
44
67
32
88
653

Ergebnisse:
1, 2
3, 1
88, 2
99, 1
44, 1
 

krgewb

Top Contributor
Als Übung kannst du es anhand der anderen vorgeschlagenen Konzepten umsetzen.

Wenn du die Arrays erstellt sind sie von vornherein mit Nullen gefüllt. Das nutze ich aus, um zu gucken, ob ein Feld eine vom Benutzer eingegebene Zahl enthält.

Falls der Benutzer nur positive Zahlen eingeben darf kannst du natürlich auch -1 anstelle von 0 verwenden.

Bei einem String-Array hat man dieses Problem nicht. Da gibt es das Schlüsselwort "null". Das hat nichts mit der Zahl Null zu tun.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java Mail Programm Java Basics - Anfänger-Themen 4
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
D JAVA Programm schreiben Java Basics - Anfänger-Themen 46
J Mein Java Programm lässt sich nicht mehr bearbeiten Java Basics - Anfänger-Themen 2
A Verarbeiten einer Excel Datei durch das java-Programm Java Basics - Anfänger-Themen 3
B Java Programm soll mit Python kommunizeren Java Basics - Anfänger-Themen 1
M JAVA Programm in Website einbinden Java Basics - Anfänger-Themen 19
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
TimoN11 Mail Programm mit Java? Java Basics - Anfänger-Themen 1
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
N Best Practice How can I creat a programm with java under windows 10 in order to open an spreadsheet in libreoffice calc format Java Basics - Anfänger-Themen 11
P Wie für EIN Java Programm von 64bit Java (=Standard) auf 32bit Java Installation (Windows) umschalten? Java Basics - Anfänger-Themen 6
X Kurzes Java-Programm, das sich komisch verhält Java Basics - Anfänger-Themen 6
G Java-Programm Terminal Java Basics - Anfänger-Themen 2
Dimax Java Programm mit exec starten Java Basics - Anfänger-Themen 5
I Java Programm sieht wie exe aus. Java Basics - Anfänger-Themen 3
G Java-Programm weitergeben Java Basics - Anfänger-Themen 14
A Java-Programm läuft bei installierter JDK aber nicht mit JRE? Java Basics - Anfänger-Themen 5
W Java Programm mit API Anbindung Java Basics - Anfänger-Themen 2
D Java Programm mit JavaScript einbinden Java Basics - Anfänger-Themen 8
X Java Programm MacOS Java Basics - Anfänger-Themen 1
F Java Programm schließen Java Basics - Anfänger-Themen 1
M Java Methode editierbar machen im Programm Java Basics - Anfänger-Themen 62
B Mit Java anderes Java Programm starten Java Basics - Anfänger-Themen 3
B Java Eclipse Programm in einer Batch ausführen Java Basics - Anfänger-Themen 3
L Java Programm zum Auswerten von Daten Java Basics - Anfänger-Themen 11
S Bestehendes Java Programm, einen festen Wert ändern Java Basics - Anfänger-Themen 17
L Java Zip-Programm Java Basics - Anfänger-Themen 16
C Input/Output Textdatei vom Java-Programm nicht geladen Java Basics - Anfänger-Themen 58
M Java Programm über Batch-Datei ausführen Java Basics - Anfänger-Themen 1
B Brauch Hilfe für Java Programm Java Basics - Anfänger-Themen 12
T CMD über Java-Programm aufrufen Java Basics - Anfänger-Themen 2
L Java-Programm kompilieren Java Basics - Anfänger-Themen 24
D Java BlueJ Programm wiederholen? Java Basics - Anfänger-Themen 6
M Java Programm: Lottozahlen Java Basics - Anfänger-Themen 4
I Java Programm Java Basics - Anfänger-Themen 12
F Java Programm öffnen Java Basics - Anfänger-Themen 3
A Erste Schritte Programm in Shell mit bestimmter Java-Version aufrufen Java Basics - Anfänger-Themen 10
J Pdf-Dokument im Java-Programm öffnen Java Basics - Anfänger-Themen 3
M Chat Programm in Java Java Basics - Anfänger-Themen 1
M Wie sicher sind Daten im Java Programm? Java Basics - Anfänger-Themen 9
M Mein erstes Java Programm Java Basics - Anfänger-Themen 5
L Herunterladbares Java Programm in bestimmten Ordner speicher Java Basics - Anfänger-Themen 3
L Konsole öffnen und Java Programm darin ausführen Java Basics - Anfänger-Themen 4
C Programm JAR startet nicht - Could not create the Java Virtual Machine Java Basics - Anfänger-Themen 4
T CMD mit Java Programm öffnen? Java Basics - Anfänger-Themen 5
B Java Programm ohne statische Main Methode aufrufen Java Basics - Anfänger-Themen 5
G Input/Output CSV-Datei über Java-Programm erstellen, Zeichensalat Java Basics - Anfänger-Themen 3
F Java-Programm gibt in Eingabeaufforderung nichts aus Java Basics - Anfänger-Themen 4
M Erste Schritte Java programm unable to access Java Basics - Anfänger-Themen 10
? Klassen einfacher Fehler in einem Java Programm. Java Basics - Anfänger-Themen 5
? Methoden Fehler in einfachem Java Programm. Java Basics - Anfänger-Themen 9
T Selbst erstellten Dateityp mit java Programm assoziieren? Java Basics - Anfänger-Themen 4
S Programm wie Java? Java Basics - Anfänger-Themen 10
M C++ programm (kompiliertes) aus java aufrufen Java Basics - Anfänger-Themen 7
A Eclipse - Java-Programm exportieren für Ubuntu TLS 10 Java Basics - Anfänger-Themen 9
F Java-Programm aus CMD ausführen mit Parametern Java Basics - Anfänger-Themen 7
N Java Programm zum Suchen und Ersetzen von Text Dateien Java Basics - Anfänger-Themen 10
P Probleme Java Programm Java Basics - Anfänger-Themen 6
MiMa Lauffähiges Java Programm erstellen Java Basics - Anfänger-Themen 4
J C++ Bitmanipulations-Programm in Java umwandeln Java Basics - Anfänger-Themen 10
N Java Programm im CMD Fenster öffnen, wie? Java Basics - Anfänger-Themen 17
S Externes Java Programm starten Java Basics - Anfänger-Themen 9
D Java Programm auf Kommandozeile durchführen Java Basics - Anfänger-Themen 12
H Ich kann mein Java Programm Test.class nicht ausführen Java Basics - Anfänger-Themen 6
M Kann Java Programm nicht starten Java Basics - Anfänger-Themen 7
V Java Chat Programm Problem mit IP Addresse Java Basics - Anfänger-Themen 7
S Hilfe zu Java-Programm und JUnit Test!! Java Basics - Anfänger-Themen 5
B Mit Java-Programm Daten aus MySQL-Datenbank auslesen, lokal und nicht lokal. Java Basics - Anfänger-Themen 10
P Java Programm in Powerpoint Java Basics - Anfänger-Themen 5
Y Java Programm URL und String Vergleich! Java Basics - Anfänger-Themen 4
U Java-Programm auf einem Server starten Java Basics - Anfänger-Themen 33
M Kann mein Java Programm nicht starten Java Basics - Anfänger-Themen 6
G Kleine Java Programme aus Main Java Programm starten..... Java Basics - Anfänger-Themen 3
P Java Programm von außen aufrufen Java Basics - Anfänger-Themen 8
D Java programm durch vorgegebene bat ausführen Java Basics - Anfänger-Themen 3
Crashbreaker Eigene Java-Programm ohne hilfe des CMD starten Java Basics - Anfänger-Themen 11
S Interpreter-Fehler Java - Programm ausführen! Java Basics - Anfänger-Themen 12
B Grafische Oberfläche für Java-Programm Java Basics - Anfänger-Themen 5
T Mac OSX - Programm aus Java öffnen Java Basics - Anfänger-Themen 3
H Wie kann ich offline ein Java Programm abspeichern Java Basics - Anfänger-Themen 14
U Visual-Basic Programm mit Java steuern Java Basics - Anfänger-Themen 8
K In MySQL Select Variablen aus Java Programm benutzen Java Basics - Anfänger-Themen 8
J Java-Programm starten Java Basics - Anfänger-Themen 6
C java programm mit Texten, speichern und so Java Basics - Anfänger-Themen 3
W Java-Programm als Icon mit Doppelklick einfach öffnen ? Java Basics - Anfänger-Themen 3
B Java-Programm-Dienst sauber beenden Java Basics - Anfänger-Themen 6
P Java Programm geschrieben ... und nun? Java Basics - Anfänger-Themen 11
W Java Programm abändern Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben