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.
Hallo!
Wie kann ich in JAVA eine kleine Anwendung implementieren, die vom Benutzer die Eingabe seines Namens einfordert. Die darauf folgende Eingabe wird eingelesen und anschließend anhand von einfachen Mechanismen auf Plausibilität hin geprüft.
Du könntest mit Hilfe der Klasse JOptionPane aus dem javax.swing package arbeiten. Diese Klasse hat eine statische Methode namens showInputDialog(prompt:String), welche einen kleinen Dialog startet mit einen Eingabefeld.
Java:
String input = null;
do {
input = javax.swing.JOptionPane.showInputDialog("Geben Sie hier ihren Namen ein.");
} while(input == null || input.isEmpty());
Also, mein Programm soll aus folgenden Schritten bestehen:
"
Konstruktor, der keine Parameter empfängt
+ Methoden für den lesenden und schreibenden Zugriff (vollständig)
+ readInput()
Liest eine Benutzereingabe ein und validiert diese;
Wiederholt dieses Vorgehen solange, bis die Eingabe gültig ist;
Weist dann die Eingabe dem Attribut des aktuellen Objektes zu
-booleanisValid(Stringinput)
Prüft, ob die als Parameter übergebene Zeichenkette bestimmte
formale Kriterien erfüllt oder nicht;
Gibt ein entsprechendes Ergebnis zurück
-booleanisJustOneName(Stringinput)
Prüft, ob die als Parameter übergebene Zeichenkette aus mehr als
einer Zeichenfolge besteht, durch Testen auf innen liegenden
Whitespace;
Gibt ein entsprechendes Ergebnis zurück
-booleancontainsOnlyLetters(Stringinput)
Prüft, ob die als Parameter übergebene Zeichenkette ausschließlich
Buchstaben enthält;
Gibt ein entsprechendes Ergebnis zurück
-StringnormalizeInput(Stringinput)
Modifiziert die als Parameter übergebene Zeichenkette so, dass sie
nicht mit Whitespace anfängt oder endet und der erste Buchstabe
groß sowie alle weiteren Buchstaben klein geschrieben sind;
Gibt als Ergebnis die so modifzierte Zeichenkette zurück
''
Aber wie kann ich das in einem Programm schreiben???
Da ich mal annehme, dass das eine Hausaufgabe deiner Uni/Schule ist würde ich so vorgehen:
Lies dir die Mitschrifften der letzten Stunden durch.
Eröffne ein Projekt in deiner Entwicklungsumgebung und erzeuge die notwendige Klasse.
Dann beginne die Methoden/Funktionen und Konstruktoren zu schreiben.
Nimm dabei als Hilfe das Web. (zB Java ist auch eine Insel, Handbuch der Java-Programmierung, ...)
/**
* @param args
*/
public static void main(String[] args) {
UserInput userInput = new UserInput ();
userInput.readInput();
System.out.println("Hallo " + userInput.getValue() + ", schön, dass du da bist!");
}
}
Code:
package edu.hm.cs.swe2.strings;
import javax.swing.JOptionPane;
public class UserInput {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public void readInput(){
String name;
do{
name=JOptionPane.showInputDialog("Gib den Namen ein");
}while(!isValid(name));
setValue(name);
}
private static boolean isValid(String text){
}
}
Was ich nicht verstehe, wie kann ich prüfen, ob:
- Zeichenkette umfasst nur ein eiziges Zeichen
-verbleibende Zeichenkette aus mehr als einem Wort besteht
- diese Zeichenkette sich ausschliesslich aus Buchstaben zusammensezt.
public class UserInput {
public static void main(String[] args) {
UserInput in = new UserInput();
in.read();
System.out.printf("Hallo %s, sei Willkommen!%n", in.getValue());
System.out.println("Name besteht nur aus einem Zeichen: " + in.justOneLetter());
System.out.println("Name besteht nur aus Buchstaben: " + in.containsOnlyLetters());
System.out.println("Name besteht nur aus einem Wort: " + in.justOneName());
System.out.println("\n<---------------END--------------->");
}
private String value;
public UserInput() {
value = null;
}
public void read() {
do {
value = JOptionPane.showInputDialog(null, "Geben Sie hier ihren Namen ein: ", "Eingabe", JOptionPane.PLAIN_MESSAGE);
} while(value == null || value.isEmpty());
}
/**
* Überprüft ob der String nur aus einem Wort besteht.
* Dabei verwende ich hier die Methode contains(CharSequence s),
* mit welcher man überprüfen kann, ob ein Teilstring in dem
* String enthalten ist.
* @return
*/
public boolean justOneName() {
if(value != null)
return !value.contains(" ");
return false;
}
/**
* So kann man übeprüfen ob der String nur ein Zeichen enthält.
* Man vergleicht die länge des internen Char - Arrays mit 1
* @return
*/
public boolean justOneLetter() {
if(value != null)
return value.length() == 1;
return false;
}
/**
* Überprüft ob die Value nur aus Buchstaben besteht.
* Verwendet dazu die Methode matches von String welche
* mit regulären Ausdrücken arbeitet.
* @return
*/
public boolean containsOnlyLetters() {
if(value != null)
return value.matches("\\D*");
return false;
}
public String getValue() {
return value;
}
}
Hier ist eine kleine Erläuterung zu den Regular Expressions
Ich glaube etwas mit Application nicht stimmt.
Ich sollte vielleicht mit java.lang.Stringbuilder, Java.lang.String und java.lang.Character arbeiten.
Mein Application:
package edu.hm.cs.swe2.strings;
import javax.swing.JOptionPane;
Java:
public class Application {
/**
* @param args
*/
public static void main(String[] args) {
UserInput in = new UserInput ();
in.read();
System.out.println("Hallo " + in.getValue() + ", schön, dass du da bist!");
}
}
Mein Problem ist, dass ich nicht weiss, wie ich Userinput und Application zusammenbinden kann...
Letzte Frage hat sich erlediegt. Ich habe meinen Fehler gefunden.
Jeztz habe ich folgendes Problem. Wenn ich "an3na" eingebe, dann kommt folgende Ausgabe:
Hallo an3na, schoen, dass du da bist!
Sei nicht so faul. Dein name ist mehr als ein Zeichen lang! false
Du hast Zeichen eingegeben, die keine Buchstaben sind. false
Du hast mehr als ein Wort eingegeben. Wie heisst du denn jeztz? true
<---------------END--------------->
Es soll kommen: "Du hast Zeichen eingegeben, die keine Buchstaben sind"
import javax.swing.*;
public class UserInput {
public static void main(String[] args) {
UserInput in = new UserInput();
in.read();
if(!in.containsOnlyLetters())
{
System.out.println("Du hast Zeichen eingegeben, die keine Buchstaben sind.");
return;
}
System.out.printf("Hallo %s, sei Willkommen!%n", in.getValue());
System.out.println("Name besteht nur aus einem Zeichen: " + in.justOneLetter());
System.out.println("Name besteht nur aus Buchstaben: " + in.containsOnlyLetters());
System.out.println("Name besteht nur aus einem Wort: " + in.justOneName());
System.out.println("\n<---------------END--------------->");
}
private String value;
public UserInput() {
value = null;
}
public void read() {
do {
value = JOptionPane.showInputDialog(null, "Geben Sie hier ihren Namen ein: ", "Eingabe", JOptionPane.PLAIN_MESSAGE);
} while(value == null || value.isEmpty());
}
/**
* Überprüft ob der String nur aus einem Wort besteht.
* Dabei verwende ich hier die Methode contains(CharSequence s),
* mit welcher man überprüfen kann, ob ein Teilstring in dem
* String enthalten ist.
* @return
*/
public boolean justOneName() {
if(value != null)
return !value.contains(" ");
return false;
}
/**
* So kann man übeprüfen ob der String nur ein Zeichen enthält.
* Man vergleicht die länge des internen Char - Arrays mit 1
* @return
*/
public boolean justOneLetter() {
if(value != null)
return value.length() == 1;
return false;
}
/**
* Überprüft ob die Value nur aus Buchstaben besteht.
* Verwendet dazu die Methode matches von String welche
* mit regulären Ausdrücken arbeitet.
* @return
*/
public boolean containsOnlyLetters() {
if(value != null)
return value.matches("\\D*");
return false;
}
public String getValue() {
return value;
}
}