Berechnung einer linearen Abschreibung

  • Themenstarter Themenstarter Funkenmarie
  • Beginndatum Beginndatum
F

Funkenmarie

Gast
Hallo ihr Lieben,

ich habe kürzlich angefangen Java zu programmieren. Nun dacht ich mir "Versuch doch mal ein paar Berechnungen und schaue mal ob die so hinbekommst" Mein Gedanke war also mein Programm die Berechnung für eine lineare Abschreibung ausgeben zu lassen.

Aussehen soll das so:

Jahr Anschaffungswert Abschreibung Restwert
2009 10.000,- 2000,- 8000,-
2010 8000,- 2000,- 6000,-
...
usw.

ich habe schon viel ausprobiert und momentan bin ich bei folgendem Code:

Java:
public class Abschreibung
{
    public void main (String[]args)
    {

        float anschaffungswert = 0.0f;
        float nutzungsdauer = 0.0f;
        float restwert = 0.0f;
        float abschreibung = 0.0f;
        Eingabe tastatur = new Eingabe ();

            System.out.println (" ");
            System.out.println ("Lineare Abschreibung");
            System.out.println (" ");
            System.out.print ("Bitte geben sie den Anschaffungswert ein:"+" ");
            anschaffungswert = tastatur.liesFloat ();
            System.out.println (" ");
            System.out.println ("Wie lange soll die Nutzungsdauer sein?");
            nutzungsdauer = tastatur.liesFloat ();
              abschreibung = anschaffungswert/nutzungsdauer;
              restwert = anschaffungswert-abschreibung;
                  do
                  {
                  nutzungsdauer --;
                  System.out.println ("Anschaffungsjahr\t\t\t\t" +"Anschaffungskosten\t\t\t"+"Restwert\t\t\t");
                  System.out.println ("\t\t"+nutzungsdauer+"\t\t"+"\t\t"+anschaffungswert+"\t\t\t\t"+restwert);
                  }
                       while (nutzungsdauer>= 0);


    }
}

Könnt ihr mir sagen was ich hier falsch mach?
Hab versucht eine Return - funktion einbauen um den Restwert wie im oberen Beispiel als neuen Anschaffungswert zu "übernehmen", sowie try/catch (wo ich mir relativ sicher war das es nicht geht) =>funktioniert nicht.....und langsam bin ich echt gereizt, weil mich das schon Stunden gekostet hat
 
du musst mit dem Kopf denken,


auf Tastatureingaben verzichte vorerst, später gut, aber du willst doch nicht bei jedem Testlauf etwas eintippen,
hier im Forum stört es auch, setze die Variablen von Anfang an
> float anschaffungswert = 10000.0f;
usw.

eine Schleife ist schon guter Anfang, die Zeile mit den Spaltenüberschriften willst du aber sicher nicht jedes Mal ausgeben,
kommt 1x VOR die Schleife, einfach zu denken, oder?

die andere Ausgabe mag gut sein, aber sie gibt immer nur dasselbe aus?
du senkst allein die Variable 'nutzungsdauer', welche du auch ausgibst, ich frage mich was das von

> Jahr Anschaffungswert Abschreibung Restwert
> 2009 10.000,- 2000,- 8000,-
> 2010 8000,- 2000,- 6000,-

sein soll, da sinkt nichts zum 1 pro Zeile..,
aber ist ja auch so schon gut, Zwischenwerte erstmal auszugeben, später schöner,

das Kardinalproblem jedenfalls: nichts anderes wird berechnet!
irgendwo braucht es doch eine Variable, die Anfangs 10.000 enthält, und vor der jeweils 2000 abgezogen werden usw.,
verwende die vorhandenen Variablen, führe neue ein, was auch immer

-----

es geht genau so wie ein Papier vollzuschreiben:
> Jahr Anschaffungswert Abschreibung Restwert
> 2009 10.000,- 2000,- 8000,-
> ?
was machst du an dieser Stelle in der neuen Zeile? 2010 hinschreiben,
und dahinter? da kommt die 8000, denn 10.000 minus 2000 ergibt 8000 usw.
kann jedes Kind

was ist an solchen Gedanken schwer, wo hapert die Umsetzung in Code?

-------
wenn du grundsätzlich nichts von Variablen usw. verstehst,
dann immer auch überlegenswert, von komplizierten Programmen wenigstens zu etwas einfacheren übersichtlichen Programmen zu wechseln:

schreibe ein Programm welches mit einer Variablen int x = 12; beginnt
und per (while-)Schleife
12,
11,
10,
..
untereinander ausgibt

ist das ein lösbares Problem?
 
Zuletzt bearbeitet von einem Moderator:
eine Schleife ist schon guter Anfang, die Zeile mit den Spaltenüberschriften willst du aber sicher nicht jedes Mal ausgeben,
kommt 1x VOR die Schleife, einfach zu denken, oder?

Jawoll. Da seh ich eigentlich auch noch nicht das Problem. Hab ich wohl einfach nur verschusselt. Wobei mich wundert, das er dann bei genau diesem Code trotzdem immer nur ein mal die Überschrift ausgibt?

was machst du an dieser Stelle in der neuen Zeile? 2010 hinschreiben,
und dahinter? da kommt die 8000, denn 10.000 minus 2000 ergibt 8000 usw.
kann jedes Kind

was ist an solchen Gedanken schwer, wo hapert die Umsetzung in Code?

An dem Gedanken ist gar nix schwer. Ich hab die Rechnungsweise ja ohne weiteres begriffen.
An der Umsetzung hapert es. Ich hab mich glaube etwas missverständlich ausgedrückt:
Den Restwert für meine in 2009 neu gekaufte Maschine mit einem Anschaffungswert von 10.000 € macht er noch ganz easy. Die Formel um den Restwert zu berechnen bleibt ja auch über die ganzen (von mir als User eingegebenen) 5 Jahre die ich abschreiben kann dieselbe.
Jetzt der Knackpunkt:
Das Programm soll einfach nur den Restwert aus 2009 nehmen, und ihn als Anschaffungswert für 2010 setzen, den Restwert berechnen ..... und das ganze eben 5 mal.
Und genau an dem Punkt wo er mir den Wert übernehmen soll, hakt es.
 
Java:
public static void main(String[] args)
    {
	float anschaffungswert = 0.0f;
	float nutzungsdauer = 0.0f;
	float restwert = 0.0f;
	float abschreibung = 0.0f;

	Scanner sc = new Scanner(System.in);

	System.out.println("Lineare Abschreibung\n");
	System.out.print("Bitte geben sie den Anschaffungswert ein:\n");

	anschaffungswert = sc.nextFloat();

	System.out.println("Bitte geben sie die Nutzungsdauer ein:\n");

	nutzungsdauer = sc.nextFloat();

	abschreibung = anschaffungswert / nutzungsdauer;
	System.out.println("Nutzungsjahr \t Restwert");
	while (anschaffungswert >= 0)
	{
	    anschaffungswert = anschaffungswert - abschreibung;
	    nutzungsdauer--;
	    System.out.println(nutzungsdauer + "\t\t " + anschaffungswert);
	}

    }

So würde es gehen. Bisschen anders formatieren in der Ausgabe und gut is.

[EDIT]Edit: Kleiner Tipp von mir, ich finde die Debug Option in Eclipse eignet sich hervorragend um nachzuvollziehen, wie eine Schleife funktioniert, bzw. wie der Code verarbeitet wird.[/EDIT]
 
Zuletzt bearbeitet:
mit dem fertigen Code erübrigt sich weiteres,
ich kann nur ermahnen, genau rückzublicken, worin die Blockade bestand,

jede Schleife muss rechnen, also Rechen-Code hinschreiben, welche Variablen usw. das ergibt sich, einfach manches ausprobieren
 
Danke an euch beide. Somit ist meine Frage erledigt.

Ich werd Spewers Code versuchen nachzuvollziehen wie SlaterB es geraten hat. Eventuell erübriggen sich dann auch einige meiner zukünftigen Fragen! 🙂
 

Neue Themen


Zurück
Oben