jedes Objekt um eins erhöhen < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Aufgabe | //sämtliche Klassen des Pakets "util" importieren
import java.util.*;
public class Main{
//Atributendeklaration
private double rabatt;
//Scanner mit Objekt s initialisieren
Scanner s = new Scanner(System.in);
//Arrays mit drei Objekten von Classe Auftrag erzeugen
Auftrag[] a = new Auftrag[3];
//liest alle benötigten Daten für die Aufträge ein
public static void main(String[] args)
{
//for Schleife initialisiert drei verschiedene Objekte
//von Classe Auftragsverwaltung mit Werten
for (int i = 0;i<3;i++)
{
a[i]=new Auftrag();
//Auftragsdaten werden eingegeben
System.out.println("geben Sie bitte folgende Daten ein:");
System.out.print("Rabatt:");
double rab = s.nextDouble();
a[i].setRabatt(rab);
}// ende forschleife
}//ende main
//zugriff auf Rabatt um änderungen vornehnmen zukönnen mit get, set
double getRabatt()
{
return rabatt;
}
void setRabatt(double neuerRabatt)
{
rabatt = neuerRabatt;
}
//erhöht den Rabatt von allen Aufträgen um Prozent Prozent
void erhoeheRabatt(double Prozent)
{
}
}//ende class |
Hallo, wie kann man diese Methode:
//erhöht den Rabatt von allen Objekten um Prozent Prozent
void erhoeheRabatt(double Prozent)
{
}
füllen, damit der Rabatt von jedem Objekt erhöht wird?
würde mich über Tipps freuen
gruß
|
|
|
|
Hallo!
Wo ist denn dein Problem genau?
Du weißt anscheinend, wie man den Rabatt mit nem neuen Wert überschreibt. Genauso kannst du den Rabatt doch irgendwie mit dem Funktionsargument verrechnen, und das Ergebnis wieder in rabatt speichern...
|
|
|
|
|
Aufgabe | public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
Auftragsverwaltung ka = new Auftragsverwaltung();
ka.daten_Einlesen();
System.out.println("Rabatt wurde bei allen Aufträgen um ein Prozent erhoeht");
double[] Prozent = new double[3];
ka.erhoeheRabatt(Prozent);
}//ende main
}//ende class
import java.util.*;
public class Auftragsverwaltung extends Auftrag
{
//Scanner mit Objekt s initialisieren
Scanner s = new Scanner(System.in);
//Arrays mit drei Objekten von Classe Auftrag erzeugen
Auftrag[] a = new Auftrag[3];
//liest alle benötigten Daten für die Aufträge ein
void daten_Einlesen()
{
//for Schleife initialisiert drei verschiedene Objekte
//von Classe Auftragsverwaltung mit Werten
for (int i = 0;i<3;i++)
{
a[i]=new Auftrag();
// Auftragsdaten werden eingegeben
System.out.println("geben Sie bitte folgende Daten ein:");
System.out.print("Rabatt:");
double rab = s.nextDouble();
a[i].setRabatt(rab);
}// ende forschleife
}//ende void daten einlesen
void erhoeheRabatt(double[] Prozent)
{
for (int i=0; i<3; i++)
{
Prozent[i]=a[i].getRabatt();
Prozent[i]++;
}
}
}//ende class
public class Auftrag {
private double rabatt;
//zugriff auf Rabatt um änderungen vornehnmen zukönnen mit get, set
double getRabatt()
{
return rabatt;
}
void setRabatt(double neuerRabatt)
{
rabatt = neuerRabatt;
}
}// ende class |
Hallo, ich weiss nicht genau woran es liegt, hier in dem Beispiel meine ich alles berücksichtigt zuhaben aber es klappt trotzdem nicht ?
wo könnte den mein Fehler liegen?
gruss capablanca
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 10:10 Mi 21.04.2010 | Autor: | capablanca |
in main -->
System.out.println("Rabatt wurde bei allen Aufträgen " +
"um ein Prozent erhoeht");
double Prozent = ka.getRabatt();
ka.erhoeheRabatt(Prozent);
in Auftragsverwaltung -->
void erhoeheRabatt(double Prozent)
{
for (int i=0; i<3; i++)
{
a[i].setRabatt(a[i].getRabatt()+1);
}
}
|
|
|
|
|
Hallo!
Mir scheint, dir fehlt noch ein wenig das objektorientierte Denken.
Warum nicht so:
public class Auftrag {
private double rabatt;
//zugriff auf Rabatt um änderungen vornehnmen zukönnen mit get, set
double getRabatt()
{
return rabatt;
}
void setRabatt(double neuerRabatt)
{
rabatt = neuerRabatt;
}
void erhoeheRabatt(double prozent)
{
rabatt = rabatt+prozent; // Wie auch immer das gerechnet werden soll
}
}// ende class
sodaß jeder Auftrag das selber machen kann. Und dann in der AUftragsverwaltung einfach
void erhoeheAlleRabatte(double Prozent)
{
for (int i=0; i<3; i++)
{
a[i].erhoeheRabatt(Prozent);
}
}
generell sehe ich dort in deinem Code übrigens Probleme in deiner Methode:
void erhoeheRabatt(double[] Prozent)
{
for (int i=0; i<3; i++)
{
Prozent[i]=a[i].getRabatt();
Prozent[i]++;
}
}
Wozu ein Array Prozent? Du setzt doch alle Rabatte auf den gleichen Wert, oder? Und was auch immer du der Methode da übergibst, mit
Prozent[i]=a[i].getRabatt();
Prozent[i]++;
werden die Werte mit den aktuellen Rabattwerten überschrieben, anschließend werden die Werte um 1 vergrößert, und danach nie wieder benutzt, sie sind dann einfach weg. Der vergrößerte Wert landet nie in den Aufträgen!
Wenn, dann geht das so:
void erhoeheAlleRabatte(double Prozent)
{
for (int i=0; i<3; i++)
{
a[i].setRabatt(a[i].getRabatt() + Prozent);
}
}
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:48 Fr 23.04.2010 | Autor: | capablanca |
Hallo erstmal danke für die ausführliche Antwort und die Tipps.
> generell sehe ich dort in deinem Code übrigens Probleme in
das stimmt! hat nicht funktioniert musste geändert werden
> deiner Methode:
>
> void erhoeheRabatt(double[] Prozent)
> {
> for (int i=0; i<3; i++)
> {
> Prozent=a.getRabatt();
> Prozent++;
> }
> }
>
>
> Wozu ein Array Prozent? Du setzt doch alle Rabatte auf den
> gleichen Wert, oder? Und was auch immer du der Methode da
> übergibst, mit
>
> Prozent=a.getRabatt();
> Prozent++;
>
> werden die Werte mit den aktuellen Rabattwerten
> überschrieben, anschließend werden die Werte um 1
> vergrößert, und danach nie wieder benutzt, sie sind dann
> einfach weg. Der vergrößerte Wert landet nie in den
> Aufträgen!
>
> Wenn, dann geht das so:
>
> void erhoeheAlleRabatte(double Prozent)
> {
> for (int i=0; i<3; i++)
> {
> a.setRabatt(a.getRabatt() + Prozent);
>
> }
> }
guter Vorschlag!
ich muss noch einwenig üben um es besser drauf zuhaben!
gruß capablanca
|
|
|
|