Aufgabe --> bedingte Anweisung

Status
Nicht offen für weitere Antworten.

ZenToR

Mitglied
Also das ist der Quelltext auf dem sich meine Frage bezieht : (es geht um bedingte anweisungen)


________________________________________________________________________


Code:
/**
 * Diese Klasse definiert Studenten in einem Uni-Verwaltungssystem.
 * Sie beschreibt die Details von Studenten, die für unseren Kontext 
 * relevant sind.
 * 
 * @author  Michael Kölling und David J. Barnes
 * @version 1.0  (3. Januar 2003)
 */
public class Student
{
    // der volle Name des Studierenden
    private String name;
    // seine Matrikelnummer
    private String matrikelnummer;
    // die Anzahl der bereits erworbenen Scheine
    private int scheine;

    /**
     * Erzeuge einen neuen Studenten mit Name und Matrikelnummer.
     */
    public Student(String vollerName, String matrNr)
    {
        name = vollerName;
        matrikelnummer = matrNr;
        scheine = 0;
    }

    /**
     * Liefere den vollen Namen dieses Studenten.
     */
    public String gibName()
    {
        return name;
    }

    /**
     * Trage einen neuen Namen ein.
     */
    public void nameAendern(String neuerName)
    {
        name = neuerName;
    }

    /**
     * Liefere die Matrikelnummer dieses Studenten.
     */
    public String gibMatrikelnummer()
    {
        return matrikelnummer;
    }

    /**
     * Erhöhe die Anzahl der erworbenen Scheine.
     */
    public void erhoeheScheinanzahl(int weitereScheine)
    {
        scheine += weitereScheine;
    }

    /**
     * Liefere die Anzahl der bereits erworbenen Scheine.
     */
    public int gibScheinanzahl()
    {
        return scheine;
    }

    /**
     * Liefere den Login-Namen. Der Login-Name ist eine Kombination der
     * ersten vier Buchstaben des Namens mit den ersten drei Ziffern der
     * Matrikelnummer.
     */
    public String gibLoginName()
    {
        return name.substring(0,4) + matrikelnummer.substring(0,3);
    }
    
    /**
     * Gib Name und Matrikelnummer auf der Konsole aus.
     */
    public void ausgeben()
    {
        System.out.println(name + " (" + matrikelnummer + ")");
    }
}

______________________________________________________________________________



Und dazu versuche ich schon ganze zeit die folgende Aufgabe zu lösen:

Die Klasse String definiert eine sondierende Operationlength,die die Länge einer Zeichenkette zurückliefert.
Sie hat folgende Signatur:

Code:
/**
 * Return the number of characters in this string.
 */
public int length()

Fügen Sie bedingte Anweisungen in den Konstruktor von "Student" ein, die eine Fehlermeldung ausgeben,
wenn der Parameter "vollerName" weniger als vier Zeichen hat oder wenn "matrNr" weniger als 3 Zeichen hat.
In jedem Fall soll der Konstrukor die übergebenen Werte benutzen, um die Datenfelder zu initialisieren, auch wenn eine Fehlermeldung ausgegeben wird.
Hinweis:
Benutzen sie eine if-Anweisung der folgenden Form (also ohne einen else-Teil), um die
Fehlermeldung auszugeben:

Code:
if (führe eine Prüfung an einem der Parameter aus) {
   Fehlermeldung ausgeben, wenn die Prüfung true geliefert hat
}

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

soo das also zur aufgabe.
Ich hab lange versucht sie zu lösen aber bin auf kein ergebnis gekommen.
Ich versteh auch nicht wie ich eine bedingte Anweisung in ein Konstruktor einfügen kann,
da kommt immer ein Fehler wenn ichs versuche...

wär nett wenn mir mal einer helfen könnte [da muss man ja eigentlich nicht viel machen ;)]
also wenn einer weiss wie die bedingte anweisung aussehen soll dann antwortet mir pls !! :D

cya ZenToR
 

Tobias

Top Contributor
Ich mags zwar nicht, wenn ich hier die Hausaufgaben von anderen machen soll, aberweils ja mitten in der Nacht ist...

Code:
public Student(String vollerName, String matrNr) {
    if(vollerName.length() < 4) {
        System.out.println("Name zu kurz!");
    }
    if(matrNr.length() < 3) {
        System.out.println("Matrikel-Nummer ungültig!");
    }

    this.vollerName = vollerName;
    this.matrNr = matrNr;
}

mpG
Tobias
 

ZenToR

Mitglied
thx für die antwort!

(würde nur noch gern wissen was der befehl this macht?? den braucht man doch gar nicht oder???)

also cya :wink:
 

citizen_erased

Bekanntes Mitglied
ZenToR hat gesagt.:
thx für die antwort!

(würde nur noch gern wissen was der befehl this macht?? den braucht man doch gar nicht oder???)

also cya :wink:

dem konstrukur wird eine variable mit dem namen matrNr übergeben. diese ist sichtbar/ gültig im konstruktor. die klasse hat allerdings auch eine variable matrNr. diese ist sichtbar/ gültig in der ganzen klassen, solange sie nicht in einem kleineren "sichtbarkeitsbereich/scope" überdeckt wird. im konstruktor ist das der fall. mit "this" kannst du darauf aufmerksam machen, dass der wert der übergebenen variable dafür benutzt wird, um damit die klassen-weiten variable zu dingsbumsen
 
G

Guest

Gast
jetzt wo ich es so nachvollziehen kann kommt mir die aufgabe sehr leicht vor :D

aber ich brauche ja eigentlich nicht kein "this". Das geht auch ohne diesen befehl !
 

citizen_erased

Bekanntes Mitglied
man sollte es so machen, sieht besser aus.

man muss es machen, wenn der name der variablen auch dem namen der instanzvariable entspricht.
für den fall, dass es so ist:


Code:
matrNr = matrNr // hat keine auswirkung auf instanzvariable. 

this.matrNr = matrNr // instanzvariable wird mit wert des parameters matrNr belegt
 

ZenToR

Mitglied
aber es klappt einfach nicht mit this ?!

da kommt so eine fehlermeldung: "cannot resolve symbol"

aber jetzt habe ich noch ne andere aufgabe die ich versucht habe alleine zu schreiben,
aber leider will das irgendwie nicht funktionieren.
also hier die Aufgabe(bezieht sich auf den Quelltext oben)

Verändern Sie die Methode gibLoginName in der Klasse Student so, dass sie
immer einen Login-Namen zurückliefert, auch wenn name oder martikelnummer nicht ausreichend
lang sind. Für Zeichenketten, die kürzer sind, soll einfach die gesamte Zeichenkette genommen werden.


Zu dieser Aufgabe habe ich mir folgendes überlegt:

Code:
    public String gibLoginName()
    {
        if (name.length() < 4, martikelnummer.length() < 3) {
        name.substring + martikelnummer.substring;
        }
        return name.substring(0,4) + matrikelnummer.substring(0,3);



also ich habe einfach eine bedingte anweisung eingefügt, die (falls name oder martikelnummer zu kurz sind)
einfach den gesamten namen und die gesamte martikelnummer als LoginNamen ausgeben soll...
funktioniert aber nicht.
???:L helft mir :autsch:
 

citizen_erased

Bekanntes Mitglied
das kannst du sicher selber. schau nochmal auf den code

Code:
    public String gibLoginName()
    {
        if (name.length() < 4, martikelnummer.length() < 3) { // für oder statt dem "," mal ein "||" nehmen
        name.substring + martikelnummer.substring; // A
        }
        return name.substring(0,4) + matrikelnummer.substring(0,3); // B

was passiert bei B? soll das hier passieren? wird ein wert zurückgegeben?
was passiert bei A? soll das hier passieren?
 
G

Guest

Gast
hmm also vieleicht so???

Code:
    public String gibLoginName()
    {
       if (name.length() < 4 || martikelnummer.length() < 3) { 
         return name.substring() + matrikelnummer.substring();
        } 
        else {
        return name.substring(0,4) + matrikelnummer.substring(0,3);
        }
    }


Bluej kann das aber nicht übersetzen da kommt ein fehler, aber ich denke so ähnlich muss das schon stimmen !
(hoffe ich )[/quote]
 
B

bygones

Gast
die methode substring verlangt mind. 1 parameter !!

aber wenn der String zu kurz ist heißt es doch,es soll alles zurückgegeben werden, also brauchst du kein substring !
 

ZenToR

Mitglied
hmm also ich verstehe das so:

Code:
public String gibLoginName()
    {
       if (name.length() < 4 || martikelnummer.length() < 3) { 
         return name + matrikelnummer;
        } 
        else {
        return name.substring(0,4) + matrikelnummer.substring(0,3);
    }
    }

ein fehler kommt aber trotzdem und zwar bei der bedingten anweisung
if (name.....
 
B

bygones

Gast
Eine kleine Bitte:
Java ist sehr hilfreich mit der Information über den Fehler. Bitte schreibe das nächste Mal was für ein Fehler kommt (NullPointerException oder so). Einfach so "n Fehler" hilft nicht weiter.....

so ins Blaue sach ich mal n NullPointerException, d.h. deine Instanzvariablen wurden nicht initialisiert ! Wie schaut denn nun eigentlich dein Konstruktor aus ?!
 

ZenToR

Mitglied
sorry :roll:


das ist die fehlermeldung:
cannot resolve symbol

bluJ meint damit diese Zeile:


Code:
       if (name.length() < 4 || martikelnummer.length() < 3) {
 
B

bygones

Gast
Dann scheinst du keine INstanzvariablen namen bzw. matrikelnummer zu haben !!
Post mal deine Klasse so wie sie jetzt ist !
 

P3AC3MAK3R

Top Contributor
Gucke ich jetzt falsch oder liegt bei der 2. Variablen ein Buchstabendreher (martikelnummer <=> matrikelnummer) vor?
 

ZenToR

Mitglied
lol das wars !!! sorry hatte nen rechtschreibfehler
muss matrikelnummer heissen und nicht martikelnummer ;D

cool hab die aufgabe danke eurer hilfe "fast" alleine geschaft thx for help !! :wink: :toll:
 
B

bygones

Gast
seht ihr genau deshalb will ich ne IDE mit Autovervollständigen !!! :roll: :toll:
 

P3AC3MAK3R

Top Contributor
Dann hat mein Querlesen also was gebracht. ;)

Ich hätte noch einen Tip für Dich, Zentor.

Um deine Instanzvariablen auszulesen bzw. zu ändern, würde ich get- und set-Methoden verwenden.

Beispiel:

Code:
private String name;

public String getName() { 
    return name; 
}

public void setName(String newName) { 
    name = newName; 
}

Wenn Du das tust, können andere Programmierer Deinen Code viel schneller lesen.
 
B

bygones

Gast
P3AC3MAK3R hat gesagt.:
Um deine Instanzvariablen auszulesen bzw. zu ändern, würde ich get- und set-Methoden verwenden.
Nicht nur das - es gehört eigentlich zum Coding Standart alle Instanzvariablen private zu machen !!!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben