previous und next einbauen

Status
Nicht offen für weitere Antworten.

m34

Aktives Mitglied
Code:
	public static void main(String[] argumente)
	{
		Auto auto1;
		auto1 = new Auto((int)01, "Honda Civic",(short)210,(short)5,(int)45,(boolean)true);
		auto1.anzeigen();	

		Auto auto2;
		auto2 = new Auto((int)02, "Mercedes",(short)200,(short)4,(int)40,(boolean)false);
		auto2.anzeigen();		

		Auto auto3;
		auto3 = new Auto((int)03, "BMW",(short)190,(short)3,(int)35,(boolean)true);
		auto3.anzeigen();	

		Auto auto4;
		auto4 = new Auto((int)04, "Volkswagen",(short)180,(short)5,(int)30,(boolean)false);
		auto4.anzeigen();		
	}
}

hallo,

ich möchte hier folgendes einbauen. beim drücken von 2 soll das nächste auto angezeigt werden, beim drücken auf 1 das vorherige. wie mache ich das? alles auf konsole natürlich. awt und swing möchte ich später einbauen, wenn alles auf der konsole funktioniert.

und überhaupt: wird das überhaupt hier eingebaut ode rin der klasse Auto?

vielen dank im voraus
m34
 

The_S

Top Contributor
Das wird hier eingebaut. Zuerst musst du eine Zahl von der Konsole lesen. Das kann z. B. so aussehen:

Code:
System.out.println("Bitte eine Zahl eingeben");
String zahl = -1;
try {
    BufferedReader buffy = new BufferedReader(new InputStreamReader(System.in));
    zahl = buffy.readLine();
}
catch (IOException e) {
    System.out.println("Ein Fehler ist aufgetreten:");
    e.printStackTrace();
}

und anschließend nur noch mittels if und else Abfragen welche Zahl denn jetzt eingegeben wurde. Du musst beachten, dass ich in meinem Beispiel Einen String und keine Zahl einlese (ist einfacher zu erweitern, wenn statt einer Zahl gleich der Name z. B. "BMW" eingegeben werden soll) und du deshalb mit equals vergleichen musst.
 

m34

Aktives Mitglied
hätte fast geklappt. aber es werden alle autos angezeigt. war switch-case eigentlich richtige wahl :)?

Code:
    public static void main(String[] args) throws IOException {
		
	//Variablen deklarieren
	int auftrag;
		
	InputStreamReader eingabeStream = new InputStreamReader(System.in);
	BufferedReader tastatur = new BufferedReader(eingabeStream);
	
    //Bildschirmausgabe vorbereiten
    PrintWriter ausgabe = new PrintWriter(System.out,true);
    
    //Eingaben
    
    ausgabe.println();
    ausgabe.println("Bitte geben Sie 1,2,3, 4 oder 5 ein.");
    
    auftrag = Integer.parseInt(tastatur.readLine());
    
    switch (auftrag) {
    case 1:
    Auto auto1;
	auto1 = new Auto((int)1, "Honda Civic", (short) 210, (short) 5,(int) 45, (boolean) true);
	auto1.anzeigen();
    case 2:
	Auto auto2;
	auto2 = new Auto((int)1, "Mercedes", (short) 200, (short) 4,(int) 40, (boolean) false);
	auto2.anzeigen();
    case 3:
	Auto auto3;
	auto3 = new Auto((int)1, "BMW", (short) 190, (short) 3, (int) 35,(boolean) true);
	auto3.anzeigen();
    case 4:
	Auto auto4;
	auto4 = new Auto((int)1, "Volkswagen", (short) 180, (short) 5,(int) 30, (boolean) false);
	auto4.anzeigen();
	default:
	ausgabe.println("Leider verstehe ich ihre Eingabe nicht!");
    }
	}
}
[/quote]
 

The_S

Top Contributor
Jo, wenn du parst ist ein Switch/Case genau richtig. Allerdings benötigst du noch vor jedem neuen case ein break; . Dann sollte es funktionieren.
 

m34

Aktives Mitglied
super, so gehts. ohne switch ging die nummerierung ganz gut. bmw bekam z.B. automatisch die ID 3. die zwei vorherigen wurden addiert. jetzt muss ich sie per hand eingeben. kann man das bei switch auch?

kann man es auch evt. so erweitern, dass man immer nur die selbe taste drückt um den nächsten wagen zu sehen? ideal wäre natürlich noch ne weitere taste und die vorherigen zu sehen.

Code:
   public static void main(String[] args) throws IOException {	
 
    //Variablen deklarieren
    int auftrag;
    
    //Autoliste
    Auto auto1;
	auto1 = new Auto((int)1, "Honda Civic", (short) 210, (short) 5,(int) 45, (boolean) true); 
	Auto auto2;
	auto2 = new Auto((int)2, "Mercedes", (short) 200, (short) 4,(int) 40, (boolean) false);
	Auto auto3;
	auto3 = new Auto((int)3, "BMW", (short) 190, (short) 3, (int) 35,(boolean) true);
	Auto auto4;
	auto4 = new Auto((int)4, "Volkswagen", (short) 180, (short) 5,(int) 30, (boolean) false);
		
	InputStreamReader eingabeStream = new InputStreamReader(System.in);
	BufferedReader tastatur = new BufferedReader(eingabeStream);
	
    //Bildschirmausgabe vorbereiten
    PrintWriter ausgabe = new PrintWriter(System.out,true);
    
    //Eingaben  
    ausgabe.println();
    ausgabe.println("Bitte geben Sie 1,2,3 und 4 ein.");
    
    auftrag = Integer.parseInt(tastatur.readLine());
    
    switch (auftrag) {
    case 1:
	auto1.anzeigen();
    break;
    case 2:
	auto2.anzeigen();
    break;
    case 3:
	auto3.anzeigen();
    break;
    case 4:
	auto4.anzeigen();
	break;
    default:
	ausgabe.println("Leider verstehe ich ihre Eingabe nicht!");
    }
	}
}
 

m34

Aktives Mitglied
angenommen ich drücke 1. dann erscheint der Honda Civic; der erste wagen. nun möchte ich nochmal die 1 drücken, um den nächsten Wagen zu sehen. Wenn ich aber 2 beispielsweise drücke soll ich den Honda wieder sehen.
 

m34

Aktives Mitglied
so, ich hoffe, ich habe es richtig umgeformt. wie kann ich nun mit der ersten beginnen, ohne dass alle angezeigt werden. dafür ist wohl "das letzte merken" notwendig. wie mache ich das mit dem merken?

Code:
    public static void main(String[] args) throws IOException {	
 
	//Tastatureingabe vorbereiten
	InputStreamReader eingabeStream = new InputStreamReader(System.in);
	BufferedReader tastatur = new BufferedReader(eingabeStream);
	
    //Eingaben  
    System.out.println("Bitte tippen Sie v(vor) oder z(zurück).");
   
    String auftrag = "v";

    auftrag = tastatur.readLine();	
    
    if (auftrag.equals("v")) {
    Auto auto1;
    auto1 = new Auto((int)1, "Honda Civic", (short) 210, (short) 5,(int) 45, (boolean) true); 
	auto1.anzeigen();
    }
    
    if (auftrag.equals("v")) {
    Auto auto2;	
    auto2 = new Auto((int)2, "Mercedes", (short) 200, (short) 4,(int) 40, (boolean) false);    	
	auto2.anzeigen();
    
    if (auftrag.equals("v")) {
    Auto auto3;
    auto3 = new Auto((int)3, "BMW", (short) 190, (short) 3, (int) 35,(boolean) true);	
	auto3.anzeigen();
    
    if (auftrag.equals("v")) {
    Auto auto4;
    auto4 = new Auto((int)4, "Volkswagen", (short) 180, (short) 5,(int) 30, (boolean) false);	
    auto4.anzeigen();

	System.out.println("Leider verstehe ich ihre Eingabe nicht!");
    }
   }
  }  
 }    
}
 

The_S

Top Contributor
Ein Beispiel:

Code:
int zahl = 0;
String eingabe = null;
BufferedReader buffy = new BufferedReader(new InputStreamReader(System.in));
Auto[] auto = new Auto[4];
auto[0] = new Auto((int)1, "Honda Civic", (short) 210, (short) 5,(int) 45, (boolean) true); 
auto[1] = new Auto((int)2, "Mercedes", (short) 200, (short) 4,(int) 40, (boolean) false);        
auto[2] = new Auto((int)3, "BMW", (short) 190, (short) 3, (int) 35,(boolean) true);    
auto[3] = auto4 = new Auto((int)4, "Volkswagen", (short) 180, (short) 5,(int) 30, (boolean) false);    
System.out.println("Geben sie v (Schritt vor), r (Schritt zurück) oder exit (beenden) ein:");
while (!(eingabe = buffy.readLine()).equalsIgnoreCase("exit")) {
    if (eingabe.equalsIgnoreCase("v")) {
        zahl++;
    }
    else if (eingabe.equalsIgnoreCase("r")) {
        zahl--;
    }
    else {
        System.out.println("Ungültige Eingabe");
    }
    if (zahl >= auto.length) {
        System.out.println("Ende der Daten erreicht");
        zahl--;
    }
    else if (zahl < 0) {
        System.out.println("Anfang der Daten erreicht");
        zahl++;
    }
    else {
        auto[zahl].anzeigen();
    }
    System.out.println("Geben sie v (Schritt vor), r (Schritt zurück) oder exit (beenden) ein:");
}
 

m34

Aktives Mitglied
wow, vielen dank für die mühe. ich erhalte nur noch diese zwei fehlermeldungen.

Code:
Auto[] auto = new Auto[];
Variable must provide either dimension expressions or an array initializer.

Hier habe ich zwar in die Klammer 0 und 1 eingetragen, ging aber nicht.


Code:
while (eingabe == buffy.readLine() != "exit") {
Incompatible operand types boolean and String.
 

KSG9|sebastian

Top Contributor
Code:
Auto[] auto = new Auto[4]
Damit wird ein Array deklariert u. initialisiert.
Ein Array ist eine Liste fester Länge und festen Typs.
Mittels var[index] kannst du auf das Element an der Stelle x zugreifen.
Natürlich 0-basiert, d.h.

1. Element - Index 1 => var[0] -> 1. Element aus der Liste
In den Eckigen Klammern gibst du die Länge an. Ändern der Länge ist nicht möglich. Falls das gewünscht ist musst du entweder eine Collection (ArrayList...) nehmen oder die Liste in eine größere reinkopieren.

Code:
while (!"exit".equals(eingabe == buffy.readLine())) {

Auf "Inhalt" von Objekten wird immer mittels equals geprüft.
== prüft ob die Referenz "identisch" sind..siehe auch FAQ
 

Murray

Top Contributor
Zum ersten Fehler:

Entweder so:
Code:
Auto[] auto = new Auto[4];
auto[0] = new Auto(1, "Honda Civic", (short) 210, (short) 5, 45,  true);
auto[1] = new Auto(2, "Mercedes", (short) 200, (short) 4, 40, false);       
auto[2] = new Auto(3, "BMW", (short) 190, (short) 3, 35, true);   
auto[3] = new Auto(4, "Volkswagen", (short) 180, (short) 5, 30, false);

oder - m.E. besser - so:
Code:
Auto[] auto = new Auto[] {
  new Auto(1, "Honda Civic", (short) 210, (short) 5, 45, true),
  new Auto(2, "Mercedes", (short) 200, (short) 4, 40, false),       
  new Auto(3, "BMW", (short) 190, (short) 3, 35, true),
  new Auto(4, "Volkswagen", (short) 180, (short) 5, 30, false)
}

Zum zweiten Fehler:

Code:
 while (eingabe == buffy.readLine() != "exit") {

Hier soll in der Schleife die Eingabe der Variablen eingabe zugewiesen werden und danach überprüft werden, ob dieser Wert gleich "exit" ist.
Erster Fehler (das ist der, den der Compiler bemerkt): hier wurde anstelle des Zuweisungsoperators "=" der Vergleichsoperator "==" verwendet; wenn überhaupt, müsste es also
Code:
 while (eingabe = buffy.readLine() != "exit") {
heißen. Das schreibe ich aber auch nur mit Bauchschmerzen, denn
Strings darf man niemals mit "==" , sondern immer nur mit equals vergleichen!

Also besser:
Code:
while ( !"exit".equals( eingabe = buffy.readLine())) {


//EDIT: Oops, zu spät :oops:

//EDIT2: und die Umlaute sind auch kaputt ???:L
 

m34

Aktives Mitglied
euch beiden herzlichen dank. auf den ersten blick scheint es zu laufen. doch wenn ich r,v oder exit eingebe erhalte ich diese meldung:

Exception in thread "main" java.lang.NullPointerException
at fahrzeug.AutoListe.main(AutoListe.java:20)

zeile 20 wäre in diesem fall:
Code:
    	    if (eingabe.equalsIgnoreCase("v")) {
 

The_S

Top Contributor
Dann ist die Varialbe "eingabe" gleich null. Sollte aber eigentlich nicht passieren. poste doch bitte mal deine komplette Klasse (ist ja nicht sonderlich groß, soweit ich das sehe!?).
 

m34

Aktives Mitglied
brauchst du auch die Auto.java?

Code:
package fahrzeug;

import java.io.*;

public class AutoListe {
    public static void main(String[] args) throws IOException {	
 
    	int zahl = 0; 
    	String eingabe = null; 
    	BufferedReader buffy = new BufferedReader(new InputStreamReader(System.in)); 
    	
    	Auto[] auto = new Auto[4]; 
    	auto[0] = new Auto((int)1, "Honda Civic", (short) 210, (short) 5,(int) 45, (boolean) true); 
    	auto[1] = new Auto((int)2, "Mercedes", 	  (short) 200, (short) 4,(int) 40, (boolean) false);        
    	auto[2] = new Auto((int)3, "BMW", 		  (short) 190, (short) 3,(int) 35, (boolean) true);    
    	auto[3] = new Auto((int)4, "Volkswagen",  (short) 180, (short) 5,(int) 30, (boolean) false);    
    	
    	System.out.println("Geben sie v (Schritt vor), r (Schritt zurück) oder exit (beenden) ein:"); 
    	while (!"exit".equals(eingabe == buffy.readLine())) {
    	    if (eingabe.equalsIgnoreCase("v")) { 
    	        zahl++; 
    	    } 
    	    else if (eingabe.equalsIgnoreCase("r")) { 
    	        zahl--; 
    	    }  
    	    if (zahl >= auto.length) { 
    	        System.out.println("Ende der Daten erreicht"); 
    	        zahl--; 
    	    } 
    	    else if (zahl < 0) { 
    	        System.out.println("Anfang der Daten erreicht"); 
    	        zahl++; 
    	    } 
    	    else { 
    	        auto[zahl].anzeigen(); 
    	    } 
    	    System.out.println("Geben sie v (Schritt vor), r (Schritt zurück) oder exit (beenden) ein:"); 
    	}}}
 

The_S

Top Contributor
Und schon haben wir den Fehler, ich hatte auch noch in der while-Schleife ein = zuviel reingebaut. Es muss natürlich
Code:
while (!"exit".equalsIgnoreCase(eingabe = buffy.readLine())
heißen. Sry, hab den Code jetzt zum 2. mal ausgebessert.
 

m34

Aktives Mitglied
hab angst es zu schreiben, aber mal gucken:

also bei r und v passiert nichts; man kann lediglich wieder was eingeben.
wenn man nun exit schreibt erscheint der erste wagen.
wenn man zuvor aber r schreibt und dann exit, dann der erste wagen mit dem text: anfang ist erreicht.

wenn man 3x v schreibt und dann exit, erscheint der 3. wagen. war das so gedacht?
 

The_S

Top Contributor
m34 hat gesagt.:
hab angst es zu schreiben, aber mal gucken:

Wir beisen (noch) nicht :lol:

m34 hat gesagt.:
also bei r und v passiert nichts;

Kann nicht sein. Ich hab nen if, else if und nen else und da ist überall ein System.out. drin (es sei denn die Ausgabe von deiner Auto-Klasse funktioniert nicht richtig) von daher MUSS irgendwas ausgeben werden.

m34 hat gesagt.:
wenn man nun exit schreibt erscheint der erste wagen.

Ne, kann eigentlich auch nicht sein. Ich habs eben mal ausprobiert:

Code:
import java.io.*; 

public class AutoListe { 
    public static void main(String[] args) throws IOException {    

       int zahl = -1; 
       String eingabe = null; 
       BufferedReader buffy = new BufferedReader(new InputStreamReader(System.in)); 
        
       Auto[] auto = new Auto[4]; 
       auto[0] = new Auto((int)1, "Honda Civic", (short) 210, (short) 5,(int) 45, (boolean) true); 
       auto[1] = new Auto((int)2, "Mercedes",      (short) 200, (short) 4,(int) 40, (boolean) false);        
       auto[2] = new Auto((int)3, "BMW",         (short) 190, (short) 3,(int) 35, (boolean) true);    
       auto[3] = new Auto((int)4, "Volkswagen",  (short) 180, (short) 5,(int) 30, (boolean) false);    
        
       System.out.println("Geben sie v (Schritt vor), r (Schritt zurück), c (Aktueller Datensatz) oder exit (beenden) ein:"); 
       while (!"exit".equals(eingabe = buffy.readLine())) { 
           if (eingabe.equalsIgnoreCase("v")) { 
               zahl++; 
           } 
           else if (eingabe.equalsIgnoreCase("r")) {  
               zahl--; 
           }
           if (zahl >= auto.length) { 
               System.out.println("Ende der Daten erreicht"); 
               zahl--; 
           } 
           else if (zahl < 0) { 
               System.out.println("Anfang der Daten erreicht"); 
               zahl++; 
           } 
           else { 
               auto[zahl].anzeigen(); 
           } 
           System.out.println("Geben sie v (Schritt vor), r (Schritt zurück), c (Aktueller Datensatz) oder exit (beenden) ein:"); 
      }}}

Bei mir funktioniert alles so wie es soll. Ich hab lediglich noch die Schrift angepasst (c für den aktuellen Datensatz) und den Zähler auf -1 gesetzt, da sonst gleich der 2. Datensatz ausgegeben wird. Aber prinzipiell hat es auch vorher funktioniert.

m34 hat gesagt.:
wenn man zuvor aber r schreibt und dann exit, dann der erste wagen mit dem text: anfang ist erreicht.

Ich hab keine Ahnung was du da machst, aber irgendwie ist das sehr merkwürdig ... Grundsätzlich passt das aber auch (mal abgesehen davon, dass du zuerst exit schreibe musst), da du nunmal am Anfang bist und du nicht noch nen Datensatz weiter vor kannst.

m34 hat gesagt.:
wenn man 3x v schreibt und dann exit, erscheint der 3. wagen. war das so gedacht?

Bis auf das exit ist das so richtig. Du willst ja immer nen Wagen vor bzw. zurück.
 

m34

Aktives Mitglied
super. es klappt :) hab herzlichen dank. werde jetzt erstmal den code verstehen und dann weiter machen.

möchte als nächstes versuchen, beim drücken einer taste das ausgewählte auto auszuleihen. dazu braucht man ja die bestelldaten. diese einzeln zu bekommen sollte kein problem sein.

wie ich es schaffe, vom ausgewählten auto zur bestellaufnahme zu wechseln, weiß ich allerdings noch nicht. ???:L
 

The_S

Top Contributor
Ist das jetzt ne Frage oder einfach nur ne Feststellung über das, was als nächstes auf dich/uns zukommt? ;)
 

m34

Aktives Mitglied
och naja, vielleicht nen kleiner tipp? wenn ich nicht weiter weiß, weiß ich ja an wen ich mich wenden muss :)
 

m34

Aktives Mitglied
Code:
while (!"exit".equals(eingabe = buffy.readLine())) { 
         1.  if (eingabe.equalsIgnoreCase("v")) { 			 
               zahl++; 
           } 
           
        2.   else if (eingabe.equalsIgnoreCase("r")) {  		
               zahl--; 
           } 
           
        3.   if (zahl >= auto.length) { 						
               System.out.println("Ende der Daten erreicht"); 
               zahl--; 
        4.    } 
           
           else if (zahl < 0) { 							
               System.out.println("Anfang der Daten erreicht"); 
               zahl++; 
       5.    } 
           
       6.    else { 
               auto[zahl].anzeigen(); 					
           }

hab noch ne kleine frage zu dieser schleife:
es werden ja z.B. 1 und 6 ausgeführt. wenn v getippt, wird ja auch 6. ausgeführt. aber ich verstehe nicht, wie das funktioniert. ist eine if-else-schleife nicht so, dass else nur dann ausgeführt wird, wenn if nicht erfüllt wird? ???:L
 

The_S

Top Contributor
also

1. if ist keien Schleife sondern eine Bedingung
2. Da hast du schon recht, aber ich hab hier ja zwei if Blöcke die unabhängig von einander ihren Dienst tuen.
 

m34

Aktives Mitglied
also ich komme doch nicht weiter. wie kann ich eine bedingung einfügen, die folgendes macht.
beim blättern sollen die autos, die nicht verliehen sind, deren boolean false sind, leihbar sein. also System.out.print("Wollen Sie dieses Auto leihen?"); nur bei nicht-verliehenen autos erscheinen.
 

The_S

Top Contributor
Du benötigst noch ne Schleife die solange das nächste bzw. vorhergehende (je nachdem ob r oder v eingegeben wurde) Auto auswählt (also die Variable zahl verändert), bis entweder Anfang oder Ende des Datensatzes erreicht ist oder ein Auto gefunden wurde, welches nicht verliehen ist.
 

m34

Aktives Mitglied
Code:
           else { 
               auto[zahl].anzeigen(); 					
           }

um diesen code eine while-schleife? aber wie frage ich den konstruktor mit den 5-werten ab? brauche ja nur den letzten wert.
 

The_S

Top Contributor
m34 hat gesagt.:
um diesen code eine while-schleife?

Nein, vorher eine While-Schleife in der du einfach solange 1 von zahl abziehst oder dazuzählst bis ein Auto erscheint, dass nicht verliehen ist oder bis du wieder am Anfang/Ende des Datensatezs bist.

m34 hat gesagt.:
aber wie frage ich den konstruktor mit den 5-werten ab? brauche ja nur den letzten wert.

Bahnhof? Welchen Konstruktor (und warum überhaupt nen Konstruktor???) Abfragen? Und warum? Ich schreib dir nochmal nen Beispiel wenn du dich bis heute Abend gedulden kannst und dir nicht mehr geholfen wird. Aber ich hab jetzt erstmal keine Zeit dazu. Sry.
 

The_S

Top Contributor
Code:
import java.io.*; 

public class AutoListe { 
    public static void main(String[] args) throws IOException {    

       int zahl = -1; 
       String eingabe = null; 
       BufferedReader buffy = new BufferedReader(new InputStreamReader(System.in)); 
        
       Auto[] auto = new Auto[4]; 
       auto[0] = new Auto((int)1, "Honda Civic", (short) 210, (short) 5,(int) 45, (boolean) true); 
       auto[1] = new Auto((int)2, "Mercedes",      (short) 200, (short) 4,(int) 40, (boolean) false);        
       auto[2] = new Auto((int)3, "BMW",         (short) 190, (short) 3,(int) 35, (boolean) true);    
       auto[3] = new Auto((int)4, "Volkswagen",  (short) 180, (short) 5,(int) 30, (boolean) false);    
        
       System.out.println("Geben sie v (Schritt vor), r (Schritt zurück), c (Aktueller Datensatz) oder exit (beenden) ein:"); 
       while (!"exit".equals(eingabe = buffy.readLine())) { 
           if (eingabe.equalsIgnoreCase("v")) { 
               zahl++; 
           } 
           else if (eingabe.equalsIgnoreCase("r")) {  
               zahl--; 
           } 
           while (zahl < auto.length && zahl > -1 && auto[zahl].isVerliehen()) { // isVerliehen() gibt zurück ob das Auto verliehen ist oder nicht
               if (eingabe.equalsIgnoreCase("v")) {
               	   zahl++;
               }
               else {
               	   zahl--;
               }
           }
           if (zahl >= auto.length) { 
               System.out.println("Ende der Daten erreicht"); 
               zahl--; 
           } 
           else if (zahl < 0) { 
               System.out.println("Anfang der Daten erreicht"); 
               zahl++; 
           } 
           else { 
               auto[zahl].anzeigen(); 
           } 
           System.out.println("Geben sie v (Schritt vor), r (Schritt zurück), c (Aktueller Datensatz) oder exit (beenden) ein:"); 
      }}}

So, is noch net optimal, aber du sollst ja auch noch was zu tun ham ;) .
 

m34

Aktives Mitglied
ok,also muss ich ...

1. isVerliehen deklarieren
2. methode isVerliehen erstellen

und da fängt es auch schon an. wie kann ich aus den 5 variablen den letzten zum vergleich heranziehen? hab meine ganzen grundlagenbücher durchgesehen, aber dazu fand ich nicht. im internet auch nicht, aber das liegt eher daran, dass ich nicht weiß, wie man das ganze nennt > auslesen, abfragen, vergleichen?.
 

m34

Aktives Mitglied
Code:
 package fahrzeug;

import java.util.Scanner;

public class Auto extends StrassenFzg {

	//Deklarationen
	protected short 	plaetze;
	public boolean 		status;
	protected String 	ID;
	protected int 		leihgebuehr;
	public static int 	anz_autos = 0;
	public boolean 	isVerliehen;
	public Auto() {
		anz_autos++;
	}

	// Konstruktor für Auto
	public Auto(String k_ID, String k_bez, short k_geschw, short k_plaetze, int k_leihgebuehr, boolean k_status) {
		ID 			= 	k_ID;	
		bez 		= 	k_bez;
		geschw 		= 	k_geschw;
		plaetze 	= 	k_plaetze;
		leihgebuehr = 	k_leihgebuehr;
		status 		= 	k_status;
		anz_autos++;
	}

	//Methode: eingeben
	public boolean eingeben() {
		Scanner eingabe = new Scanner(System.in);

		try {
			System.out.print("Kennzeichen:\t");
			ID = eingabe.next();		
			System.out.print("Marke:\t");
			bez = eingabe.next();
			System.out.print("Plaetze:\t");
			plaetze = eingabe.nextShort();
			System.out.print("Top-Speed:\t");
			geschw = eingabe.nextShort();
			System.out.print("Leihgebuehr:\t");
			leihgebuehr = eingabe.nextShort();			
			System.out.print("Status:\t");
			status = eingabe.nextBoolean();
			return true;
		} catch (Exception e) {
			return false;
		}
	}
	
	//Methode: anzeigen
	public boolean anzeigen() {
		System.out.println("Kennzeichen\t" + ID);
		System.out.println("Marke\t\t" + bez);		
		System.out.println("Plätze\t\t" + plaetze);
		System.out.println("Top-Speed:\t" + geschw);
		System.out.println("Leihgebuehr:\t" + leihgebuehr);		
		if (status)
			System.out.println("Status:\t\tEs ist verliehen.\n");
		else
			System.out.println("Status\t\tEs ist nicht verliehen.\n");
		return true;
	}
	
	//Methode: isVerliehen
	public boolean isVerliehen() {
		if (status)
			System.out.println("Sie können dieses Auto zur zeit nicht ausleihen.");
		else
			System.out.println("Wollen Sie dieses Auto ausleihen?");
		return true;
	}
}
 

The_S

Top Contributor
Also

1. solltest du dich mal mit private, protected und public beschäftigen. Du setzt da alles nach belieben wie du möchtest.
2. Die Variable isVerliehen benennst du in verliehen um.
3. Die Variable status kannste löschen
4. Die Methode isVerliehen schaut so aus

Code:
public boolean isVerliehen() {
    return verliehen;
}

so, das wars erstmal ;)
 

m34

Aktives Mitglied
Code:
//Methode: anzeigen
	public boolean anzeigen() {
		System.out.println("Kennzeichen\t" + ID);
		System.out.println("Marke\t\t" + bez);		
		System.out.println("Plätze\t\t" + plaetze);
		System.out.println("Top-Speed:\t" + geschw);
		System.out.println("Leihgebuehr:\t" + leihgebuehr);		
		if (status)
			System.out.println("Status:\t\tEs ist verliehen.\n\t\tSie können dieses Auto leider nicht leihen.\n");
		else
			System.out.println("Status\t\tEs ist nicht verliehen.\n\t\tSie können dieses Auto leihen.\n\n\t\tWollen Sie dieses Auto leihen: (J)a oder (N)ein?");	
		return true;
	}

Also diese Ausgabe von verliehen oder nicht habe ich nun anders, leichter, gelöst :)

Nun sollen bei Eingabe von J die persönlichen Daten aufgenommen werden, bei N soll das nächste Auto angezeigt werden. Ich werde das mal versuchen.

Irgend ein Logikfehler an dieser Variante?

Jepp, werde ich mir gleich ansehen (protected, public etc.) :)
 

The_S

Top Contributor
Naja, gibts ja keine große Logik dahinter ;) . Ich würd die Methode nur als void machen und nicht als boolean.
 

m34

Aktives Mitglied
also daten aufnehmen und wiedergeben geht. nur wo binde ich das ein? an welche stelle?

also "wollen sie mieten? - dann drücken sie "j"soll zwar angezeigt werden, aber man soll mit weiterhin mit v und r blättern können. nur beim klicken von (j) sollen die persönlichen daten angefordert werden.


Code:
 System.out.println("Vorname: ");         
   		String vorname = buffy.readLine();
   		
        System.out.println("Name: "); 
   		String name = buffy.readLine();     
   		
        System.out.println("Strasse: ");         
   		String strasse = buffy.readLine();
   		
        System.out.println("Hausnr: "); 
   		String hausnr = buffy.readLine();  
   		
        System.out.println("PLZ: ");         
   		String plz = buffy.readLine();
   		
        System.out.println("Ort: "); 
   		String ort = buffy.readLine();  
   		
        System.out.println("Sonstiges: ");         
   		String sonstiges = buffy.readLine();

   		System.out.println
   		("\nIhre eingegebenen Daten:\n-------------------------" +
   		"\nVorname:\t"		+ 	vorname + 
   		"\nName:\t\t" 		+ 	name + 
   		"\nStrasse:\t" 		+ 	strasse + 
   		"\nHausnr:\t\t" 	+ 	hausnr + 
   		"\nPLZ:\t\t" 		+ 	plz + 
   		"\nOrt:\t\t" 		+ 	ort + 
   		"\nSonstiges:\t"	+	sonstiges + 
   		"\n\nSind diese Eingaben richtig? <J>a oder <N>ein?)");
[/code]
 

m34

Aktives Mitglied
was muss ich nun tun, damit diese Aufforderung nur dann kommt, wenn man "j" drück?

Code:
           else { 
        	   auto[zahl].anzeigen(); 
        	   
               System.out.println("Vorname: ");         
          		String vorname = buffy.readLine();
          		
               System.out.println("Name: "); 
          		String name = buffy.readLine();     
          		
               System.out.println("Strasse: ");         
          		String strasse = buffy.readLine();
          		
               System.out.println("Hausnr: "); 
          		String hausnr = buffy.readLine();  
          		
               System.out.println("PLZ: ");         
          		String plz = buffy.readLine();
          		
               System.out.println("Ort: "); 
          		String ort = buffy.readLine();  
          		
               System.out.println("Sonstiges: ");         
          		String sonstiges = buffy.readLine();

          		System.out.println
          		("\nIhre eingegebenen Daten:\n-------------------------"   +
          		"\nVorname:\t"		+ 	vorname     + 
          		"\nName:\t\t" 		+ 	name          + 
          		"\nStrasse:\t" 		+ 	strasse        + 
          		"\nHausnr:\t\t" 	+ 	hausnr + 
          		"\nPLZ:\t\t" 		+ 	plz + 
          		"\nOrt:\t\t" 		+ 	ort + 
          		"\nSonstiges:\t"	+	sonstiges + 
          		"\n\nSind diese Eingaben richtig? <J>a oder <N>ein?)");  
           }
 

The_S

Top Contributor
nochmal ne Abfrage von der Konsole starten, ob die Daten erfasst werden sollen und falls "j" eingegeben wurde die Daten einlesen und anschließend ausgeben.
 

m34

Aktives Mitglied
klasse, man kann in dieses teil ja beliebig viele if's eintragen :) es funktioniert.

Code:
       System.out.println("Geben Sie v (Schritt vor), r (Schritt zurück), c (Aktueller Datensatz) oder exit (beenden) ein:"); 
       while (!"exit".equals(eingabe = buffy.readLine())) { 
           if (eingabe.equalsIgnoreCase("v")) { 
               zahl++; 
           } 
           
           if (eingabe.equalsIgnoreCase("n")) { 
               zahl++; 
           }
           if (eingabe.equalsIgnoreCase("j")) { 
               System.out.println("Vorname: ");         
         		String vorname = buffy.readLine();
         		
              System.out.println("Name: "); 
         		String name = buffy.readLine();     
         		
              System.out.println("Strasse: ");         
         		String strasse = buffy.readLine();
         		
              System.out.println("Hausnr: "); 
         		String hausnr = buffy.readLine();  
         		
              System.out.println("PLZ: ");         
         		String plz = buffy.readLine();
         		
              System.out.println("Ort: "); 
         		String ort = buffy.readLine();  
         		
              System.out.println("Sonstiges: ");         
         		String sonstiges = buffy.readLine();

         		System.out.println
         		("\nIhre eingegebenen Daten:\n-------------------------" +
         		"\nVorname:\t"		+ 	vorname + 
         		"\nName:\t\t" 		+ 	name + 
         		"\nStrasse:\t" 		+ 	strasse + 
         		"\nHausnr:\t\t" 	+ 	hausnr + 
         		"\nPLZ:\t\t" 		+ 	plz + 
         		"\nOrt:\t\t" 		+ 	ort + 
         		"\nSonstiges:\t"	+	sonstiges + 
         		"\n\nSind diese Eingaben richtig? <J>a oder <N>ein?)");  
           }          
           else if (eingabe.equalsIgnoreCase("r")) {  
               zahl--; 
           }
           
           if (zahl >= auto.length) { 
               System.out.println("Ende der Daten erreicht"); 
               zahl--; 
           }
           
           else if (zahl < 0) { 
               System.out.println("Anfang der Daten erreicht"); 
               zahl++; 
           }
           
           else { 
        	   auto[zahl].anzeigen();
 

m34

Aktives Mitglied
es wäre aber glaube ich eleganter, wenn man dafür ne methode in der auto-klasse anfertigt, oder?
 

The_S

Top Contributor
Dann solltest du die Grundlagen mal dringend auffrischen. Weil das sind absolute Basics!

Kommt darauf an wie dein Klassendesign aussieht. Wenn die Daten fest einem Auto zugeordnet werden ja. Ansonsten nein.
 

m34

Aktives Mitglied
wenn ich die daten eingebe, so stehen sie in der nächsten zeile. wie kriege ich es hin, dass sie direkt neben "Name: ---", "Vorname: ---" usw. stehen?

zudem wüsste ich gerne, wie man aus einem array ein einzelnes attribut auslesen kann. brauche zum beispiel diese 45. möchte damit unten beispielsweise rechnen, aber auch ausgeben.
 

The_S

Top Contributor
Wenn du statt

System.out.println("blub");

ein

System.out.print("blub");

schreibst wird der nachfolgende System.out. auf die selbe Zeile geschrieben.

Einzelnes Attribut von Array:

Code:
int[] intArray = new int[2];
intArray[0] = 42;
intArray[1] = 50;
System.out.println("Ist die Antwort auf alles " + intArray[0] + " oder " + intArray[1] + "?");
 

m34

Aktives Mitglied
also muss ich bei diesem beispiel ...

Code:
       auto[1] = new Auto((String)"HI-FT 262", "Mercedes",    (short) 200, (short) 4,(int) 40,  (boolean) false);

... dem vorletzten wert, also den, den ich haben möchte, hier wäre es (int) 40, nochmal zusätzlich schreiben.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D next() Methode mehrfach verwenden Java Basics - Anfänger-Themen 1
G while.next() Verständnisfrage Java Basics - Anfänger-Themen 16
M Liste Implementation, doppelt next() Java Basics - Anfänger-Themen 13
B OOP next cannot be resolved or is not a field Java Basics - Anfänger-Themen 6
gstarplayer [Verständnisprobleme] Java next(),nextLine,nextInt und parseInt! Java Basics - Anfänger-Themen 22
S Iterator next() Nullpointer Java Basics - Anfänger-Themen 2
G Erklärung .next Java Basics - Anfänger-Themen 4
L Next()-Aufruf zweimal innerhalb einer While-Schleife bei ListIterator Java Basics - Anfänger-Themen 10
C Methoden Verkettete listen - next methode Java Basics - Anfänger-Themen 3
M Frage zu ResultSet.next() Java Basics - Anfänger-Themen 7
N Scanner next() oder nextLine() zur prüfung auf leere Eingabe... Java Basics - Anfänger-Themen 6
A next in einer Schleife Java Basics - Anfänger-Themen 2
K next() und getFirst() Methode in LinkedList Java Basics - Anfänger-Themen 6
K 2 x "Next" im Plugin Java Basics - Anfänger-Themen 7
D On Error Resume Next Java Basics - Anfänger-Themen 16
Q Iterator next erstellen Java Basics - Anfänger-Themen 4
G String mit next()-Methode einlesen - keine Leerzeichen! Java Basics - Anfänger-Themen 11
J int temp = (int) it.next(); -> inconvertible types? Waru Java Basics - Anfänger-Themen 3
S Wie arbeitet iter.next() Java Basics - Anfänger-Themen 3
J Wie kann ich hier eine While schleife einbauen? Java Basics - Anfänger-Themen 3
B Email Client in der eigenen Software einbauen Java Basics - Anfänger-Themen 3
R Grafische Benutzeroberfläche GUI nachträglich einbauen Java Basics - Anfänger-Themen 3
J Erste Schritte Wie kann ich einen String in eine If einbauen :)? Java Basics - Anfänger-Themen 12
T setter im Konstruktor einbauen? Java Basics - Anfänger-Themen 8
T JScrollPane in den Code einbauen Java Basics - Anfänger-Themen 5
A HILFE in Java Matrizzen einbauen mit *Bezahlung!* Java Basics - Anfänger-Themen 1
H Eigenen Listener einbauen Java Basics - Anfänger-Themen 5
C Methoden Einen Timer einbauen, aber wie? Java Basics - Anfänger-Themen 5
F Verzögerung einbauen Java Basics - Anfänger-Themen 2
J Ranking für Spiel einbauen Java Basics - Anfänger-Themen 12
C "sortieren", wo einbauen? Java Basics - Anfänger-Themen 6
D Klassen Funktion in Klasse einbauen Java Basics - Anfänger-Themen 5
M ToogleButton einbauen Java Basics - Anfänger-Themen 10
S Ziel in Spiel einbauen Java Basics - Anfänger-Themen 4
S Einbauen von Klassen Java Basics - Anfänger-Themen 2
D currentTimeMillis() in Sortierverfahren einbauen Java Basics - Anfänger-Themen 12
N javax.swing.JOptionPane einbauen? Java Basics - Anfänger-Themen 9
S Key-Listener richtig "einbauen" Java Basics - Anfänger-Themen 42
M Verstehe Aufgabe nicht, wie kann man schleifen einbauen? Java Basics - Anfänger-Themen 5
S Array in Aufgabe einbauen Java Basics - Anfänger-Themen 12
I If abfrage in switch case einbauen Java Basics - Anfänger-Themen 5
G Java zu Javascripts umwandeln oder in HTML einbauen Java Basics - Anfänger-Themen 14
P ant in java einbauen Java Basics - Anfänger-Themen 9
D Projekt als jar exportieren: Wie externe jars einbauen? Java Basics - Anfänger-Themen 5
G StringUtils von jakarta.apache.org/commons/lang/api einbauen Java Basics - Anfänger-Themen 3
M Kurze Pause ins Programm einbauen Java Basics - Anfänger-Themen 5
G wie 'tabs' und 'zeilenumbruch' in textfile einbauen? Java Basics - Anfänger-Themen 5
M Schleifenindex in Variablennamen einbauen Java Basics - Anfänger-Themen 9
G MouseListener einbauen - wie? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben