code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen)

triade

Aktives Mitglied
Hallo,
habe einen code geschrieben der einen sagt wie viele Wörter der eigegebene Text beinhaltet. ich hatte die Idee das der Code noch die Anzahl der einzelnen Bustaben bestimmt. Der code an sich ist ja nicht schwer, dieser ist ja genau so wie der bei der anzahl der wörter wo man die Leerzeichen bestimmt +1.

Hier als Bsp. für den bustaben b:
Java:
int b=0;
        for (int i=0;i<ne.length();i++)
        {
            if(ne.charAt(i) == 'b')
            {
                b++;
            }
        }
        System.out.println(b);

Was meine frage allerdings ist, ist es möglich den code so zu schreiben das er von sich aus von allen Bustaben das bestimmt und ich den codeabschnitt oben nicht 26 mal schreiben muss. Damit der Code nicht so unnötig überfüllt ist. Und weiß wer ob dies in einer separaten Methode machbar wäre allerdings so das die main Methode darauf zurückgreifen kann und auf die Benutzer Eingabe bestimmt die anzahl der vom nutzer gewollten Bustaben ausgibt?

Z.b der Nutzer möchte die anzahln des Bustaben t und der code greift in der zusätzlichen Methode daruaf und antwortet das dieser Bustabe so und so oft vorkommt.


(Zudem bitte ich um Entschuldigung das die frage so schlecht sage ich mal gestellt ist allerdinsg weiß ich nie wie ich eine passende frage vormulieren kann)
 

KonradN

Super-Moderator
Mitarbeiter
Bei so Anforderungen muss man sich eine Datenstruktur überlegen, die man verwenden möchte / könnte. Üblich sind hier z.B.:

a) Arrays / Listen: Da hast Du dann für die 26 Buchstaben halt ein Array oder eine Liste mit 26 Elementen. Die Anzahl der Vorkommen eines Buchstaben sind also in so einem Array oder Liste. Und dann musst Du nur noch von einem Zeichen zu dem index kommen. Das kann bei einem Buchstaben sein, dass Du vom Buchstabencode einfach 'a' abziehst. Dann wäre a -> 0, b -> 1, ...

b) Maps - bei Maps hast Du key/value Paare. Dann kannst Du also in der Map den Buchstaben als Key und die Anzahl als Wert ablegen. Damit könntest Du dann über den Buchstaben direkt auf die Anzahl zugreifen.

Das einfach nur, um Dir zwei mögliche Ansätze aufzuzeigen, die Du nutzen könntest. Generell sollte man sich also sehr gut mit der Collections API von Java vertraut machen, damit man die Möglichkeiten kennt, die das Framework einem gibt und auch die Unterschiede zwischen den einzelnen Klassen versteht um eine sinnvolle Implementation zu wählen.

Eine erste Übersicht von Oracle zu Java 7 wäre z.B. Collections (Java Platform SE 7 ) (oracle.com)
 

Ernesto95

Bekanntes Mitglied
Ich finde man kann gar nicht früh genug anfangen so zu programmieren das das Ergebnis leicht skalierbar ist, demnach erachte ich Vorschlag B von Konrad als deutlich effizienter.

Nur mal angenommen das Programm wird ein Riesenerfolg und soll weltweit ausgerollt werden, dann stößt man mit diesem "Zeichen auf Index umwandeln" bei Lösung A schnell an seine Grenzen wenn dann die ganzen länderspezifischen Sonderzeichen dazu kommen (wir mit unseren ä,ü,ö und ß, die Franzosen mit Ihren Strichen etc ...)

Demnach einfach eine Map nutzen mit einer Char als Key und einem Integer als Wert. Bei jedem Buchstaben dann abfragen ob der Key schon existiert. Wenn ja dann den zugehörigen Integer Wert inkrementieren, wenn nein dann einen neuen Schlüssel anlegen mit Integer Wert von 1.
 

Robert Zenz

Top Contributor
Ich finde man kann gar nicht früh genug anfangen so zu programmieren das das Ergebnis leicht skalierbar ist, demnach erachte ich Vorschlag B von Konrad als deutlich effizienter.

Ja, aber eher Nein. Man sollte so programmieren dass eine brauchbare, angemessene Loesung dabei herauskommt. Das ist nicht immer die Loesung die am leichtesten skaliert. Zum Beispiel auf die Frage "Wie fuehre ich eine Java Applikation auf meinem Desktop aus?" zu antworten "Ein Docker-Image gestartet ueber einen Kubernetes-Dienst ist ganz einfach" dann ist dass die Loesung die am besten skaliert, aber dann doch die Frage nach offenen Hinterteilen aufkommen laesst.

Aehnlich verhaelt es sich hier, wenn du schon mit char statt int arbeitest kannst du genauso gut ein Array fuer alle moeglichen char-Werte anlegen, das ist dann ein 65k Array und das spielt leistungstechnisch keinerlei Rolle, auf keiner Maschine. Da koennte sogar die Map das teurere sein wenn es um die Rechenzeit geht. Anders verhaelt es sich natuerlich wenn du den ganzen UTF-8 Bereich abdecken willst, ein Array mit 4 Milliarden moeglichen Werten ist da schon etwas gruseliger (nicht zuletzt weil Java derart grosze Arrays nicht kann, man muesste es aufteilen oder den "neuen" Support fuer grosze Arrays verwenden, von dem habe ich aber nur gehoert).

Und um dann doch noch meinem Drang nachzugeben (welchen ich beim ersten sehen vom Thema unterdrueckt hatte): Hier meine Wiederholung zu Boxing/Autoboxing.
 

KonradN

Super-Moderator
Mitarbeiter
Man sollte so programmieren dass eine brauchbare, angemessene Loesung dabei herauskommt.
Das ist der ganz große, wichtige Punkt. Man muss also die Anforderungen analysieren und dann eine brauchbare Lösung auswählen. Und was man dann wirklich braucht und was brauchbar ist, muss man dann sehen. Daher waren das auch nur zwei Beispiele, was man machen könnte und man sollte generell die Möglichkeiten kennen. Der Hinweis zu den Collections gab es ja schon, aber das ist nur eine kleine Basis.

Wichtiger als irgendwelche Optimierungen sind aus meiner Sicht erst einmal, das ein lesbarer Code entsteht. (Klar, Code sollte vernünftig geschrieben sein um z.B. unnötigen Aufwand zu vermeiden, aber wenn es nur um die 26 Zeichen geht, dann würde ich bezüglich Array und Map gar nicht erst evaluieren wollen, was besser ist.

Nur mal angenommen das Programm wird ein Riesenerfolg und soll weltweit ausgerollt werden, dann stößt man mit diesem "Zeichen auf Index umwandeln" bei Lösung A schnell an seine Grenzen wenn dann die ganzen länderspezifischen Sonderzeichen dazu kommen (wir mit unseren ä,ü,ö und ß, die Franzosen mit Ihren Strichen etc ...)
Dann ist aber evtl. auch die Map Lösung schlecht. Wenn ich die Anzahl der möglichen UTF Zeichen betrachte, dann kann das kritisch werden. Dann sind evtl. Lösungen notwendig, die Daten nicht im Hauptspeicher halten. Dann bleiben nur zuletzt verwendete Elemente im Cache. (Dann hat man z.B. eine Datenbanklösung). Also auch wenn ich hier auf Collections im Java Framework verwiesen habe: Das ist nur ein eigentlich kleiner Teil an Möglichkeiten - auch wenn man damit sehr viel abdecken kann.
 

triade

Aktives Mitglied
Hallo, ich habe es mit Arrays gelöst allerdings fehlt noch eine Sache zum endgültigen Code, und zwar das der Nutzer bestimmt welche Anzahl von welchem Bustaben ihn angezeigt wird. Hätte jemand eine idee wie das aussehen könnte?
Code bis jz:
Java:
import java.util.Scanner;

public class WoerterAnzahl
{
     public static void main (String [] args)
    {
        woerterausrechnen();
    }
    public static void woerterausrechnen()
    {

        System.out.println("Hallo ich sage Ihnen wie viele Wörter Ihr Text Beinhaltet geben Sie diesen einfach ein.");
        Scanner zeta = new Scanner(System.in);
        String ne = zeta.nextLine();
        int leerz = 0;
        int woe=0;
        for (int i=0;i<ne.length();i++)
        {
            if(ne.charAt(i) == ' ')
            {
                leerz++;
            }
            
        }
        woe=leerz+1;
        System.out.println("Ihr Text hat " + woe + " Wörter.");



        // Bustaben
      

        int[] bust = new int[26];
        for (int h = 0; h < 26; h++)
        {
        bust[h] = 0;
        }

        char[]  bustaben = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        char[]  bg = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
        
        for(int i=0;i<ne.length(); i++)
        {
            for(int j=0;j<26;j++)
            {
                
                if(ne.charAt(i) == bustaben[j]||ne.charAt(i) == bg[j])
                {
                      bust[j]++;
                }
            
            }
        }
        System.out.println(bust[0]);
    }
}
 

Oneixee5

Top Contributor
Darüber solltest du noch mal ganz besonders nachdenken:
Java:
        int[] bust = new int[26];
        for (int h = 0; h < 26; h++)
        {
        bust[h] = 0;
        }
 

triade

Aktives Mitglied
Darüber solltest du noch mal ganz besonders nachdenken:
Java:
        int[] bust = new int[26];
        for (int h = 0; h < 26; h++)
        {
        bust[h] = 0;
        }
Meinst du man kann es besser machen das alle 26 werte auf 0 gesetzt werden?
Und der Grund warum ich es eben mit Arrays statt mit einer Map gemacht habe ist der das ich morgen ne Arbeit über Arryas und Schleifen usw. schreibe und deshalb die Sachen die ich gerade schreibe darauf ausrichte ob es damit geht damit ich das besser Lerne. Zudem hatte ich Maps in der Schule noch garnet (möchte diese zwar lernen, ohne frage, allerdings schreibe ich eben so kleinere Projekte die an meinen Lehrer gehen als so zusätzliches für die Sonstige Leistung und da ist es eben besser wenn ich das verwende was wir im Unterricht nutzen.).
 

Oneixee5

Top Contributor
Die Größe eines int-Wertes liegt bei 32 Bit. Er umfasst einen Wertebereich von dezimal -2147483648 (-2^31) bis 2147483647 (2^31 -1). int ist kein Object daher kann int nicht null (oder nichts) sein und muss vor der ersten Verwendung initialisiert werden. Das gilt auch wenn int Bestandteil eines Arrays ist. Also ist:
Java:
int[] bust = new int[26];
automatisch ein Array welches 26 mal 0 enthält.
 
Zuletzt bearbeitet:

triade

Aktives Mitglied
Da steht wenn ich mich nicht irre nicht was allerdings als 0 gewertet wird . :)
Die Größe eines int-Wertes liegt bei 32 Bit. Er umfasst einen Wertebereich von dezimal -2147483648 (-2^31) bis 2147483647 (2^31 -1). int ist kein Object daher kann int nicht null (oder nichts) sein und muss vor der ersten Verwendung initialisiert werden. Das gilt auch wenn int Bestandteil eines Arrays ist. Also ist:
Java:
int[] bust = new int[26];
automatisch ein Array welches 26 mal 0 enthält.
Okay vielen Dank 🙏 Aber hättest du ne Idee wie ich es mit dem Aussuchen vom Nutzer machen kann? Denn jetzt mit 26 If‘s zu kommen ist schon nervig. Zudem würde Ich es gerne so machen das der Nutzer einfach von somvielen bustaben wie es möchte die Anzahl angezeigt bekommt. Wieich dies machen kann ist mir auch noch fremd und habe auch dazu eben keine Idee.
 

Oneixee5

Top Contributor
Aber hättest du ne Idee wie ich es mit dem Aussuchen vom Nutzer machen kann?
Dann schau doch mal in die ASCII-Tabelle rein. a ist dezimal 97 und z ist dezimal 122. Das ist doch super! Das Array int[] bust = new int[26]; begint mit dem Index 0 also 'a' - 'a' = 0 --> bust[0] ist der Wert den du brauchst. 'b' - 'a' = 1 --> bust[1] ... usw.
Also lasse den Nutzer einen Buchstaben eingeben und ziehe 97(a) ab, wenn es ein Kleinbuchstabe ist. Wenn die Eingabe kleiner als 'a' ist, dann ist es ein Großbuchstabe, dann einfach -'A'.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H projekt 1 code schöner schreiben. Java Basics - Anfänger-Themen 25
I Wie diesen Code besser schreiben? (Zeitformate) Java Basics - Anfänger-Themen 2
tomzen Programm ignoriert in der Ausführung Code Java Basics - Anfänger-Themen 8
O Obfuscateter Code lässt sich nicht ausführen? Java Basics - Anfänger-Themen 7
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 10
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
Ü Dead Code im Programm? Java Basics - Anfänger-Themen 13
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
terashy VS Code Project run error Java Basics - Anfänger-Themen 10
JaZuDemNo Code Erklärung Java Basics - Anfänger-Themen 3
M Connect-4-Code analysieren Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
W In alten Code zurück- und dort wieder zurechtfinden? Java Basics - Anfänger-Themen 17
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
T Fehlercode bei code der das Alter ausrechnet Java Basics - Anfänger-Themen 2
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
jhfjeh Strukturgramm in code Java Basics - Anfänger-Themen 11
D Tipps zum Code Java Basics - Anfänger-Themen 24
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
ohneInformatik; For Schleife. Was macht dieser Code?? Java Basics - Anfänger-Themen 5
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
W Rückfrage zur Programmgestaltung (clean code) Java Basics - Anfänger-Themen 12
M intelliJ auf neuem PC, plötzlich kein Code Java Basics - Anfänger-Themen 3
Pinhg Sound in Greenfoot Code einbinden Java Basics - Anfänger-Themen 2
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
J Größter gemeinsamer Teiler: mein Code Java Basics - Anfänger-Themen 6
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
A Wie könnte man diesen Code kürzer machen ? Java Basics - Anfänger-Themen 7
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
S Hilfe bei Umänderung von Java Code Java Basics - Anfänger-Themen 16
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
K Wie kann man diesen Code schnell und effizient interpretieren (Man hat nur 4 Minuten) Java Basics - Anfänger-Themen 3
R ISBN-10-Code überprüfen Java Basics - Anfänger-Themen 7
I Bitte um Hilfe zu unterstehenden Code Java Basics - Anfänger-Themen 6
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
I HTML Code säubern Java Basics - Anfänger-Themen 4
B Brauche Hilfe zu einem Code Java Basics - Anfänger-Themen 5
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
N Java-Code abwärtskompatibel machen Java Basics - Anfänger-Themen 4
J Erste Schritte Was mache ich in meinem Code falsch. Java Basics - Anfänger-Themen 3
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
S Compiler-Fehler Nicht adressierbarer Code ( Non-addressable code ) Java Basics - Anfänger-Themen 5
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
A Code Problem Java Basics - Anfänger-Themen 6
C Fehler im Code Java Basics - Anfänger-Themen 10
A Zu einem bestimmten Ort im Code springen Java Basics - Anfänger-Themen 11
L Ist der Code richtig Java Basics - Anfänger-Themen 3
josfe1234 code vereinfachen Java Basics - Anfänger-Themen 15
nonickatall Ausführbarkeit von Code testen bzw. Remote Debugging Java Basics - Anfänger-Themen 4
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
G Programm Code Java Basics - Anfänger-Themen 5
C Code zusammenfassen Java Basics - Anfänger-Themen 5
I Erklärung zum Java Code Java Basics - Anfänger-Themen 2
T Programmablaufsplaninterpretation in Code umformen Java Basics - Anfänger-Themen 1
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
AlexVo String zu Java Anweisung getString("*** java code ***") Java Basics - Anfänger-Themen 19
M ISBN-Code Java Basics - Anfänger-Themen 26
B Zeitgleiches Arbeiten am Code mit mehreren Personen? Java Basics - Anfänger-Themen 7
S Wie kann ich bei diesem Code erreichen, das als Ergebnis hier 15 herauskommt? Java Basics - Anfänger-Themen 23
N Kann man den Code vereinfachen? Java Basics - Anfänger-Themen 25
marcooooo Code erklären Java Basics - Anfänger-Themen 28
marcooooo Code erklären Java Basics - Anfänger-Themen 4
S Advent of Code Day4 Java Basics - Anfänger-Themen 4
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
Gaudimagspam Caesars Code entziffern in Java Java Basics - Anfänger-Themen 8
Lukasbsc Wie kann ich meinen Code optimieren? Java Basics - Anfänger-Themen 4
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
T Main startet nicht bei vorgegebenen Code Java Basics - Anfänger-Themen 41
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
M Code nur für Cracks? Crack the Passwort Übung Java Basics - Anfänger-Themen 7
parrot Code entferneJedeZweiteZiffer Java Basics - Anfänger-Themen 6
G Code kürzen Java Basics - Anfänger-Themen 5
Bluedaishi Source Code Signieren Java Basics - Anfänger-Themen 22
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
L Best Practice Code refactern Java Basics - Anfänger-Themen 30
G code kürzen Java Basics - Anfänger-Themen 16
A Code umschreiben Java Basics - Anfänger-Themen 6
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8
X Reverse algorithm engineering (Java code) Java Basics - Anfänger-Themen 6
T Bufferedwriter code Nullpointerexception Java Basics - Anfänger-Themen 4
V Switch Methode macht Code kaputt Java Basics - Anfänger-Themen 18
R Was muss ich an meinem Code ändern? Java Basics - Anfänger-Themen 2
S Bewertet meinen Code - Part 1 Java Basics - Anfänger-Themen 8

Ähnliche Java Themen


Oben