You are not logged in.

waldinator

Praktikant

  • "waldinator" started this thread

Posts: 11

Date of registration: Nov 24th 2009

1

Saturday, May 15th 2010, 7:11pm

Java Aufgabe 6

Hallo ich habe ein Problemchen mit Java, undzwar schon bei
a) Erstellen Sie als erstes eine Enum-Klasse ItemStatus, mit den Eigenschaften Available,
Reserved, Borrowed und BorrowedAndReserved. Sehen Sie außerdem eine toString()-
Methode vor, deren Aufruf den Zustand als String zurückgibt.

Java source code

1
2
3
4
5
6
public enum ItemStatus {
   	Available, Reserved, Borrowed, BorrowedAndReserved;

  	public String toString(){
     	if (this==Available) return "jeah";}
}

... ist meine enum Klasse und mit...

Java source code

1
2
3
4
5
6
7
8
9
10
11
class Test
{
  public static void main(String... args){

	ItemStatus i = ItemStatus.Available;
	ItemStatus j = ItemStatus.Reserved;

	System.out.println(i.toString() + j.toString());
  
  }
}

...wollte ich sie testen. aber er sagt mir jetzt missing return statement und zeigt auf die geschwungene Klammer nach dem "jeah"; .
Was hab ich falsch gemacht in der enum Klasse? Da ist doch ein return für die toString Methode.

FSW16

Trainee

  • "FSW16" is male

Posts: 119

Date of registration: Jun 25th 2008

Location: Hildesheim

2

Saturday, May 15th 2010, 7:14pm

Hi,
du benutzt aber ein if und somit brauchst du mindestens 2 mal return einmal wenn "if" eintrifft und ein return falls "if" nicht eintrifft.

MfG

Edit: z.B. so:

Java source code

1
2
3
4
5
6
7
8
9
10
11
public enum ItemStatus {
   Available, Reserved, Borrowed,  BorrowedAndReserved;

  public String toString(){
     if  (this==Available) 
      return "jeah";
     else
      return "not available";
  }

}

This post has been edited 9 times, last edit by "FSW16" (May 15th 2010, 7:36pm)


Sebastian

Trainee

  • "Sebastian" is male

Posts: 101

Date of registration: Sep 21st 2007

Location: Hannover

3

Saturday, May 15th 2010, 10:03pm

Es ist auch sinnvoll, jedem ItemStatus Wert eine eigene toString() Methode zu geben, damit du je nach Status auch eine sinnvolle Meldung bekommst.
Das geht z.B. so:

Java source code

1
2
3
4
5
6
7
8
9
10
EnumWert1 {
		public <typ> methode() {
			return <xxx>;
		}
	},
EnumWert3 {
		public <typ> methode() {
			return <xxx>;
		}
	}
try {MessageBox.Show(message);} catch(Exception e) {MessageBox.Show(e.Message);}

This post has been edited 1 times, last edit by "Sebastian" (May 15th 2010, 10:04pm)


audhen

Praktikant

  • "audhen" is male

Posts: 13

Date of registration: Sep 29th 2009

4

Monday, May 17th 2010, 4:22pm

Du könntest wohl auch mit Switch arbeiten ;)

  • "Schokoholic" is male

Posts: 2,518

Date of registration: Oct 4th 2006

Location: Hannover

Occupation: Haarspaltung

5

Monday, May 17th 2010, 5:26pm

Oder den Instanzen deines enum Instanzvariablen geben und diese mit einem Konstruktor initialisieren, so dass toString() nur noch den Inhalt der Instanzvariable zurückgeben muss.

brent

Trainee

Posts: 41

Date of registration: Apr 7th 2010

6

Tuesday, May 18th 2010, 5:51pm

Source code

1
System.out.println(i.toString() + j.toString());


Du brauchst nicht extra .toString() hinschreiben. Es ist als Arbeitserleichterung gedacht. Wenn der Compiler merkt, dass ein beliebiges Objekt an einen String angehängt werden soll, sucht es im Objekt nach einer vorhandenen toString Methode und ihrem Rückgabewert. Man braucht sich selbst nicht mehr im einzelnen um die Typenumwandlung zu kümmern.

Source code

1
System.out.println("" + i + j);


das reicht schon aus.

FSW16 hat schon die Antwort auf die eigentliche Frage gegeben. Der Java-Compiler neigt zur Bevormundung und prüft, ob wirklich in jedem Fall für einen Rückgabewert gesorgt worden ist. Das ist nicht in allen Sprachen so streng geregelt, weil der Compiler nicht sehr weit mitdenken kann und oft Fälle verlangt, die logischerweise niemals auftreten könnten.