Eingaben in String Array einlesen

Der_Julian

Mitglied
Ich soll als Anfänger-Aufgabe ein Programm schreiben, das eine Eingabe des Nutzers zu LeetSpeek (oder LeetSpeech?) konvertiert. Dabei sollen Arrays verwendet werden.
Jetzt hab ich nur das Problem, dass ich zwar weiß, wie man eine Eingabe einliest (java.util.scanner), jedoch nicht weiß, wie man diese Eingabe in einem Array speichert. Und eben auch nicht, wie und ob man es ohne lösen könnte.
Bisheriger Code hängt an.
Hilfe wäre von Nöten, da dies Teil einer verpflichtenden Abgabe ist.

import java.util.Scanner;

public class LeetSpeechConverter {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in) ;

String [] alphabet = { "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" } ;
String [] leetSpeech = {"4" , "|3" , "[" , "1)" , "3" , "|=" , "9" , ")-(" , "|" , "_|" , "|<" , "|_" , "!V!" , "()" , "|°" , "0_" , "|2" , "$" , "+" , "v" , "V" , "W" , "><" , "°/" , "2"};

for (int k = 0; k < Eingabe.length(); k++) {
for (int i = 0; i < alphabet.length; i++) {
if(alphabet == Eingabe[k]) {
System.out.println(leetSpeech);
}
}
}

scanner.close();
}
}
 
K

kneitzel

Gast
Also es geht nicht darum, eine Eingabe in einem Array zu speichern, sondern doch eher, dass du auf die Buchstaben der Eingabe zugreifen willst, oder?

Die Eingabe liegt als String vor und die Beschreibung der Funktionalität eines Strings findet sich hier:
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html
length() hast Du ja schon gefunden, charAt könnte interessant sein oder toCharArray. Aber auch substring wäre denkbar, da Du ja das alphabet in Strings und nicht in chars speicherst.

Und in deinem Code musst Du aufpassen:
a) Wenn Du auf ein Array zugreifen willst, dann darfst Du die [] nicht vergessen!
b) String vergleicht man mit equals und nicht mit ==
 

Elenteria

Bekanntes Mitglied
Geh deine Eingabe Zeichen für Zeichen durch. Ermittel an welcher stelle das Zeichen im Array alphabet vorkommt und nimm das Zeichen an der gleichen Position des leetSpeech Array.

In Pseudocode etwa so
Code:
String eingabe = scanner.input();
for(index = 0; index < eingabe.length; index++) {
    char zeichen = eingabe.charAt(index)
    int position = getPositionInAlphabet(zeichen)
    String leetspeech = getLeetSpeechAtPosition(position)
    output(leetspeech)
}
 

Der_Julian

Mitglied
Geh deine Eingabe Zeichen für Zeichen durch. Ermittel an welcher stelle das Zeichen im Array alphabet vorkommt und nimm das Zeichen an der gleichen Position des leetSpeech Array.

In Pseudocode etwa so
Code:
String eingabe = scanner.input();
for(index = 0; index < eingabe.length; index++) {
    char zeichen = eingabe.charAt(index)
    int position = getPositionInAlphabet(zeichen)
    String leetspeech = getLeetSpeechAtPosition(position)
    output(leetspeech)
}

Mit dem, was du vorgeschlagen hast, hat es fast funktioniert, nur kann ich dann den char Zeichen nicht mit dem String (Array) Alphabet vergleichen. Und zu einem Char Array will sich das ganze nicht umformatieren lassen (wobei Strings doch eigentlich nur Char-Arrays sind, oder?).
Und das Einlesen eines Strings funktioniert gerade auch nicht, deshalb erstmal ein statischer Platzhalter. Das versuch ich dann in der Zwischenzeit herauszubekommen.

Code:
import java.util.Scanner;

public class LeetSpeechConverter {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in) ;
   
    String [] alphabet = { "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"} ;
    String [] leetSpeech = {"4" , "|3" , "[" , "1)" , "3" , "|=" , "9" , ")-(" , "|" , "_|" , "|<" , "|_" , "!V!" , "()" , "|°" , "0_" , "|2" , "$" , "+" , "v" , "V" , "W" , "><" , "°/" , "2"};
   
    //String [] TestEingabe = { "D" , "E" , "I" , "N" , "E" , "M" , "A" , "M" , "A"} ;
   
    String Eingabe = ("Ich kann nicht mehr!");
   
    for (int k = 0; k < Eingabe.length(); k++) {
        char zeichen = Eingabe.charAt(k) ;
        for (int i = 0; i < alphabet.length; i++) {
            if(alphabet[i] == zeichen) {
                System.out.println(leetSpeech[i]);
            } else {
                System.out.println(zeichen);   
            }
        }
    }
   
    scanner.close();
  }
}
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Also ein char ist immer nur ein Zeichen. Das alphabet von Dir ließe sich umändern in ein char array, aber dann müsstest Du die Konstanten mit single quotes angeben, also 'A', 'B', ... statt "A", "B", ....

Du kannst aber auch aus Deinem Zeichen ein String machen. Statt charAt würdest Du dann substring nutzen mit Länge 1.
Oder wenn Du bei charAt bleiben willst: Du kannst das Zeichen an einen leeren String anhängen, also
Java:
char zeichen = "" + Eingabe.charAt(k);

Ganz viele Möglichkeiten. Aber wie schon gesagt: Wenn Du Strings vergleichen willst, musst du statt == die Funktion equals nutzen!

Und Deine Logik ist noch nicht ganz stimmig, aber das wirst Du sehen, wenn du es einmal ans laufen bekommen hast.
 

Der_Julian

Mitglied
Update: Es läuft... Irgendwie.
Vielen Dank für die Hilfestellungen :)

Code:
import java.util.Scanner;

public class LeetSpeechConverter {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in) ;
    
    //String [] alphabet = { "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"} ;
    String Alphabet = ("ABCDEFGHIJKLMNOPQRSTUVWXYZ") ;
    String [] leetSpeech = {"4" , "|3" , "[" , "1)" , "3" , "|=" , "9" , ")-(" , "|" , "_|" , "|<" , "|_" , "!V!" , "N" , "()" , "|°" , "0_" , "|2" , "$" , "+" , "v" , "V" , "W" , "><" , "°/" , "2"};
    
    
    String EingabeTemp = scanner.nextLine() ;
    String Eingabe = EingabeTemp.toUpperCase() ;
    
    for (int k = 0; k < Eingabe.length(); k++) {
        char zeichenE = Eingabe.charAt(k) ;
        int kontrolle = 0;
        for (int i = 0; i < Alphabet.length(); i++) {
            char zeichenA = Alphabet.charAt(i) ;
            if(zeichenE != zeichenA) {
                kontrolle++;
            }
            if(zeichenA == zeichenE) {
                System.out.println(leetSpeech[i]);
            }
            if(kontrolle == 26) {
                System.out.println(zeichenE);
                kontrolle = 0;
            }
        }
    }
    
    scanner.close(); 
  }
}
 
K

kneitzel

Gast
Ohh ja, interessant, wie Du es mit der kontrolle gelöst hast. Auch Dein Wechsel hin zu Alphabet als String ist interessant, zumal Du nicht einfach einen Vorschlag umgesetzt hast sondern Du hast eine eigene Lösung gefunden. Erst einmal sehr gut.

Willst Du evtl. einmal versuchen, ob Du die innere Schleife in eine Funktion ausgliedern kannst? Oder seid ihr noch nicht so weit?
Dadurch könnte der Code noch einmal um einiges lesbarer und auch teilweise einfacher sein. Aber dazu müsste man Funktionen und die Rückgabe von Werten kennen.
 

Der_Julian

Mitglied
Liegt es an meiner nachösterlichen geistigen Trägheit oder warum sehe ich nicht, welches Problem mit der kontrolle gelöst wurde?
Ich hab danach noch einmal die Aufgabenstellung gelesen, und mir ist aufgefallen, dass das Programm Zeichen, die nicht im Alphabet enthalten sind, unverändert wieder ausgeben soll.
Deshalb hab ich eine Funktion eingebaut, die das Zeichen "durchwinkt" wenn der Vergleich 26 mal fehlgeschlagen ist (Also mit allen Buchstaben des Alphabets)
 

Der_Julian

Mitglied
Ohh ja, interessant, wie Du es mit der kontrolle gelöst hast. Auch Dein Wechsel hin zu Alphabet als String ist interessant, zumal Du nicht einfach einen Vorschlag umgesetzt hast sondern Du hast eine eigene Lösung gefunden. Erst einmal sehr gut.

Willst Du evtl. einmal versuchen, ob Du die innere Schleife in eine Funktion ausgliedern kannst? Oder seid ihr noch nicht so weit?
Dadurch könnte der Code noch einmal um einiges lesbarer und auch teilweise einfacher sein. Aber dazu müsste man Funktionen und die Rückgabe von Werten kennen.
Nein, das würde meine aktuellen Kentnisse übersteigen.
Ich hatte zwar mal ähnliche Operationen in C, kann mich jedoch selbst daran nur noch schwammig erinnern.
Ich soll dieses Programm zwar später noch als Funktion in ein anderes Programm einbauen, jedoch werden die Werte nicht von dem Programm weiter verwendet werden (Ergo: Print-Befehle reichen dann auch noch aus).
 
K

kneitzel

Gast
Liegt es an meiner nachösterlichen geistigen Trägheit oder warum sehe ich nicht, welches Problem mit der kontrolle gelöst wurde?
Das Problem ist halt, dass er, wenn es keinen Match gab, das Original Zeichen ausgeben wollte. Da mitzuzählen ist recht interessant. Ich hätte da ein Boolean genommen als Flag, um zu sehen, ob wir schon eine Ausgabe für das Zeichen hatten.
Mit eine Funktion getLeetString(Char) hätte halt beim ersten Treffer das Resultat geliefert und hätte nach der Schleife den Char als default Wert. Das würde das ersparen.

Aber ich finde es sehr erfrischend, wie hier auf Vorschläge eingegangen wird. Es geht ganz offensichtlich nicht nur um eine Lösung zum kopieren sondern um das Verständnis und dann der eigenen Umsetzung. Gerade nach den letzten Tagen empfinde ich das als sehr positiv :)
 
K

kneitzel

Gast
Nein, das würde meine aktuellen Kentnisse übersteigen.
Ich hatte zwar mal ähnliche Operationen in C, kann mich jedoch selbst daran nur noch schwammig erinnern.
Ich soll dieses Programm zwar später noch als Funktion in ein anderes Programm einbauen, jedoch werden die Werte nicht von dem Programm weiter verwendet werden (Ergo: Print-Befehle reichen dann auch noch aus).

Das ist ok, dem müssen wir dann auch nicht vorgreifen. Evtl. kommen wir ja später noch einmal darauf zurück.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Scanner String Eingaben ignorieren Java Basics - Anfänger-Themen 4
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
S ArrayList Username und passwort mit JTextField eingaben abgleichen Java Basics - Anfänger-Themen 10
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
M Erste Schritte Mehrere eingaben in einer Line vergleichen (if equals...) Java Basics - Anfänger-Themen 6
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
ralli85 Programm nach einer gewissen Anzahl von Eingaben beenden Java Basics - Anfänger-Themen 15
A Ungültige Eingaben: Fehler ausgeben Java Basics - Anfänger-Themen 16
A Fehler bei der Speicherung von JOptionPane-Eingaben Java Basics - Anfänger-Themen 4
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7
F Erste Schritte Mehrere nextInt() Eingaben nebeneinander ausgeben Java Basics - Anfänger-Themen 12
K Eingaben in Array ausgeben Java Basics - Anfänger-Themen 3
R Scanner-Eingaben addieren Java Basics - Anfänger-Themen 5
H Best Practice Alternative Möglichkeit, um Eingaben vorzunehmen Java Basics - Anfänger-Themen 13
R struktogramm eingaben Java Basics - Anfänger-Themen 4
D Summe von Eingaben in einer for Schleife Java Basics - Anfänger-Themen 4
M Timer für Termial-Eingaben Java Basics - Anfänger-Themen 3
H Input/Output Console löschen und Eingaben in Echtzeit Java Basics - Anfänger-Themen 3
M Erste Schritte Eingaben in ein Array packen Java Basics - Anfänger-Themen 5
M Maskierte Eingaben in der Konsole? Java Basics - Anfänger-Themen 3
T Input/Output Scanner Eingaben auf Console farbig darstellen, wie? Java Basics - Anfänger-Themen 13
H JTable: Eingaben mit ENTER übernehmen Java Basics - Anfänger-Themen 2
B Eingaben verwerten Java Basics - Anfänger-Themen 7
Haave EAN-13-Prüfziffer: Vermeiden von Eingaben mit mehr/weniger als 12 Ziffern Java Basics - Anfänger-Themen 3
S Eingaben über die Konsole Java Basics - Anfänger-Themen 2
Obit Eingaben aus GUI auslesen Java Basics - Anfänger-Themen 10
J Regelmäßige Eingaben: Unresolved compilation problem? Java Basics - Anfänger-Themen 7
Antoras Durchschnitt ist nicht korrekt; Eingaben löschen Java Basics - Anfänger-Themen 7
A JTable nimmt eingaben von tastatur nicht an? Java Basics - Anfänger-Themen 2
D Klasse zum Auslesen von Eingaben Java Basics - Anfänger-Themen 2
L Gelöst: Negative Eingaben sollen verweigert werden Java Basics - Anfänger-Themen 3
M Dynamische Wertsetzung von Variablen durch Eingaben Java Basics - Anfänger-Themen 9
R Eingaben Java Basics - Anfänger-Themen 5
M Verdeckung von Eingaben Java Basics - Anfänger-Themen 3
A Was erzeugen diese Eingaben? Java Basics - Anfänger-Themen 2
G Webapplikation mit JSP und Beans - Eingaben sichern, wie? Java Basics - Anfänger-Themen 11
M Überprüfen ob die eingaben in einem JTextField eine Zahl ist Java Basics - Anfänger-Themen 5
D Nochmal zu den dummen Eingaben über Tastatur Java Basics - Anfänger-Themen 15
P Boolean Eingaben Java Basics - Anfänger-Themen 6
G Probleme mit Eingaben Java Basics - Anfänger-Themen 10
T Kann man in einer Anwendung Eingaben simulieren? Java Basics - Anfänger-Themen 8
B Probleme mit Eingaben [System.in.read())] Java Basics - Anfänger-Themen 10
A Innerhalb eines ActionEvents Eingaben tätigen Java Basics - Anfänger-Themen 23
O Überprüfung von Eingaben auf Sinnhaftigkeit Java Basics - Anfänger-Themen 7
B Tastatur eingaben abfragen und dann in Argumente zerlegen..? Java Basics - Anfänger-Themen 8
krgewb String mit Datumsangabe in Long umwandeln Java Basics - Anfänger-Themen 2
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
K String analysieren Java Basics - Anfänger-Themen 27
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3
E String zerlegen aus args Java Basics - Anfänger-Themen 1
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
J String Filter Java Basics - Anfänger-Themen 5
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2
D 2D Char Array into String Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
I Zerlegen von String Java Basics - Anfänger-Themen 3
B Beliebiger String gegeben Suche Datum in String Java Basics - Anfänger-Themen 6
I String Java Basics - Anfänger-Themen 4
I API - zurückgegebener JSON String lesen und in Entity konvertieren Java Basics - Anfänger-Themen 2
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
Substring in einem String finden Java Basics - Anfänger-Themen 13
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
I Eindeutiger String mit maximaler Anzahl an Zeichen Java Basics - Anfänger-Themen 11
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
JavaBeginner22 Integer in String umwandeln Java Basics - Anfänger-Themen 7
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
HolyFUT Input/Output Leerzeichen aus String entfernen - klappt nicht! Java Basics - Anfänger-Themen 13
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben