Restbuchwert Berechnung geht nicht

matthias953

Mitglied
Hallo zusammen,

ich habe vor wenigen Wochen mein Studium angefangen, komme aber nicht in Programmieren weiter. Wir sollen eine Art Tabelle machen, wo ganz links die Jahre stehen, dann in der Mitte die Abschreibung und dann der Restbuchwert. Soweit so gut. Die Abschreibung habe ich noch hinbekommen, jedoch hänge ich nun bei dem Restbuchwert. Er will diesen nicht nehmen.. ich habe schon viel herumprobiert und bin letztendlich hier gelandet...

Java:
package MeinPaket;

import java.text.*;

public class abschreibung {

    // Anschaffungskosten
    static final double anschaffungskosten = 21000;

    // Nutzungsdauer
    static final int nutzungsdauer = 7;

    // linear degressive Abschreibung
    static final double degressiveabschreibung = 0.2;

    // Jahranzeige bis 7 Jahre inkl. Jahr 0
    static int[] jahr = { 0, 1, 2, 3, 4, 5, 6, 7 };

    // Berechnung der Abschreibung und fortlaufende Abschreibung in jeder Zeile
    public static double[] berechnung() {
        double[] abschreibung = new double[nutzungsdauer + 1];
        // double[] restbuchwert = new double[(int) (anschaffungskosten + 1)];

        for (int i = 1; i < jahr.length; i++) {
            abschreibung[i] = anschaffungskosten / nutzungsdauer;
            // restbuchwert[i] = anschaffungskosten - abschreibung[i];

    }
        return abschreibung;
    }

    public double[] restbuchwert() {
        double[] restbuchwert = new double[(int) (nutzungsdauer + 1)];
   
        for (int k = 1; k < jahr.length; k++) {
            restbuchwert[k] = anschaffungskosten - MeinPaket.abschreibung.abschreibung;
        }
        return restbuchwert;
}
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        // Überschrift Lineare Abschreibung
        System.out.println("Lineare Abschreibung: ");

        // Überschrift Jahr
        System.out.println("Jahr \t Abschreibung \t Restbuchwert");

        // Schleifenbeginn ; Array
        for (int i = 0; i < jahr.length; i++) {

            // Funktionsausgabe
            System.out.print(jahr[i]);

            // Dezimalzahlen Darstellung
            // for (i=0; system.out.printf(i));
            DecimalFormat myFormat = new DecimalFormat(",#00.00 \u00A4\u00A4");

            // Jahr 0 anpassung der leerzeichen, da 0,00 linksbündig war (zu
            // kleine Zahl im Gegensazu zu den anderen)
            String formatErgebnis = myFormat.format(berechnung()[i]);
            int k = formatErgebnis.length();
            while (k < 13) {
                formatErgebnis = " " + formatErgebnis;
                k = k + 1;
            }

            // Ausgabe als Dezimalzahl im gewünschten Format s. Oben
            // "Dezimalzahlen Darstellung"
            System.out.println("\t" + formatErgebnis);
        }
    }
}
Raus kommt nur das hier:
Lineare Abschreibung:
Jahr Abschreibung Restbuchwert
0 00,00 EUR
1 3.000,00 EUR
2 3.000,00 EUR
3 3.000,00 EUR
4 3.000,00 EUR
5 3.000,00 EUR
6 3.000,00 EUR
7 3.000,00 EUR
(Die Formatierung sieht hier etwas misslungen aus)
Leider ohne den gewünschten Restbuchwert...

Bitte um Tipps oder Hilfe!

Danke


EDIT:

Ich möchte in diesem Part die Anschaffungskosten - die berechnete Abschreibung machen, jedoch sagt er mir "abschreibung" cannot resolved or is not a field.

Code:
 public double[] restbuchwert() {
        double[] restbuchwert = new double[(int) (nutzungsdauer + 1)];
   
        for (int k = 1; k < jahr.length; k++) {
            restbuchwert[k] = anschaffungskosten - MeinPaket.abschreibung.abschreibung;
        }
        return restbuchwert;
 
Zuletzt bearbeitet von einem Moderator:

matthias953

Mitglied
Muss ich das mit Println ausgeben? Mir wurde bei dem restbuchwert von einem Kommilitonen geholfen. Dort wurde "return restbuchwert;" benutzt und die Zahlen wurden trotzdem ausgegeben?

Also ich hab das auch mal probiert jetzt mit Sysout, aber er gibt die Zahlen trotzdem nicht aus.
Die Sysout Ausgabe muss doch in der restbuchwert Methode ausgegeben werden oder wie kann ich die Berechnung in der Main Methode benutzen?

Code:
    public static double[] restbuchwert() {
        double[] restbuchwert = new double[(int) (nutzungsdauer + 1)];
      
        for (int k = 1; k < jahr.length; k++) {
            restbuchwert[k] = anschaffungskosten - (anschaffungskosten / nutzungsdauer) ;
            System.out.println(restbuchwert[k]);
        }
        return restbuchwert;


EDIT: Habe es in der MainMethode hinbekommen auszugeben, jedoch kommt das dabei raus:

Lineare Abschreibung:
Jahr Abschreibung Restbuchwert
0[D@1db9742
00,00 EUR
1[D@d93b30
3.000,00 EUR
2[D@16d3586
3.000,00 EUR
3[D@154617c
3.000,00 EUR
4[D@a14482
3.000,00 EUR
5[D@140e19d
3.000,00 EUR
6[D@17327b6
3.000,00 EUR
7[D@14ae5a5
3.000,00 EUR
 
X

Xyz1

Gast
So, ich habe etwa 400 Beiträge (vergangene) nach Zinseszinsrechnung durchsucht, aber konnte ihn nicht mehr finden. :( Jedenfalls, diese Frage gab es hier bereits! Und ich hab ein adaequate Antwort dazu erstellt.

Du musst Jahr, Abschreibung und Restbuchwert JEDES MAL mit einem sout ausgeben lassen...
 

JStein52

Top Contributor
Nimm mal den println aus deiner methode restbuchwert raus, Diese Methode liefert dir ja die Restbuchwerte als doule-Array zurück. Du solltest jetzt in deiner main-Methode die Werte noch richtig ausgeben. Zeige mal deine main-Methode wie die jetzt aussieht
 

matthias953

Mitglied
Also das mit ln ist mir gerade auch aufgefallen habe soweit die richtige Formatierung, jedoch sind nun Restbuchwert und Abschreibung vertauscht. Die Zahlen machen ebenfalls keinen Sinn^^


Java:
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        // Überschrift Lineare Abschreibung
        System.out.println("Lineare Abschreibung: ");

        // Überschrift Jahr
        System.out.println("Jahr \t Abschreibung \t Restbuchwert");

        // Schleifenbeginn ; Array
        for (int i = 0; i < jahr.length; i++) {

            // Funktionsausgabe
            System.out.print(jahr[i]);
         
            System.out.print("\t" + MeinPaket.abschreibung.restbuchwert());

            // Dezimalzahlen Darstellung
            // for (i=0; system.out.printf(i));
            DecimalFormat myFormat = new DecimalFormat(",#00.00 \u00A4\u00A4");

            // Jahr 0 anpassung der leerzeichen, da 0,00 linksbündig war (zu
            // kleine Zahl im Gegensazu zu den anderen)
            String formatErgebnis = myFormat.format(berechnung()[i]);
            int k = formatErgebnis.length();
            while (k < 13) {
                formatErgebnis = " " + formatErgebnis;
                k = k + 1;
            }

            // Ausgabe als Dezimalzahl im gewünschten Format s. Oben
            // "Dezimalzahlen Darstellung"
            System.out.println("\t" + formatErgebnis);
        }

Raus kommt:

Lineare Abschreibung:
Jahr Abschreibung Restbuchwert
0 [D@1db9742 00,00 EUR
1 [D@d93b30 3.000,00 EUR
2 [D@16d3586 3.000,00 EUR
3 [D@154617c 3.000,00 EUR
4 [D@a14482 3.000,00 EUR
5 [D@140e19d 3.000,00 EUR
6 [D@17327b6 3.000,00 EUR
7 [D@14ae5a5 3.000,00 EUR
 
Zuletzt bearbeitet von einem Moderator:

JStein52

Top Contributor
deine Ausgabe ist ein bisschen verkorkst. Ich würde die Schleife so machen:

Java:
double[] abschreibung = berechnung();
double[] restbuchwert = restwert();

for (int i = 0; i < jahr.length; i++) {

            // Funktionsausgabe
            System.out.print(jahr[i]);
      
            System.out.print("\t" + restbuchwert[i]);

            // Dezimalzahlen Darstellung
            // for (i=0; system.out.printf(i));
            DecimalFormat myFormat = new DecimalFormat(",#00.00 \u00A4\u00A4");

            // Jahr 0 anpassung der leerzeichen, da 0,00 linksbündig war (zu
            // kleine Zahl im Gegensazu zu den anderen)
            String formatErgebnis = abschreibung[i];
            int k = formatErgebnis.length();
            while (k < 13) {
                formatErgebnis = " " + formatErgebnis;
                k = k + 1;
            }

            // Ausgabe als Dezimalzahl im gewünschten Format s. Oben
            // "Dezimalzahlen Darstellung"
            System.out.println("\t" + formatErgebnis);
        }
 
Zuletzt bearbeitet von einem Moderator:

matthias953

Mitglied
So, ich habe etwa 400 Beiträge (vergangene) nach Zinseszinsrechnung durchsucht, aber konnte ihn nicht mehr finden. :( Jedenfalls, diese Frage gab es hier bereits! Und ich hab ein adaequate Antwort dazu erstellt.

Du musst Jahr, Abschreibung und Restbuchwert JEDES MAL mit einem sout ausgeben lassen...

Wie ist das gemeint? Bin leider absoluter Neuling. Also ich muss doch eigentlich immer eine Berechnung machen lassen und diese dann Ausgeben?

Hast du ein konkretes Beispiel?
 

matthias953

Mitglied
deine Ausgabe ist ein bisschen verkorkst. Ich würde die Schleife so machen:

Code:
double[] abschreibung = berechnung();
double[] restbuchwert = restwert();

for (int i = 0; i < jahr.length; i++) {

            // Funktionsausgabe
            System.out.print(jahr[i]);
      
            System.out.print("\t" + restbuchwert[i]);

            // Dezimalzahlen Darstellung
            // for (i=0; system.out.printf(i));
            DecimalFormat myFormat = new DecimalFormat(",#00.00 \u00A4\u00A4");

            // Jahr 0 anpassung der leerzeichen, da 0,00 linksbündig war (zu
            // kleine Zahl im Gegensazu zu den anderen)
            String formatErgebnis = abschreibung[i];
            int k = formatErgebnis.length();
            while (k < 13) {
                formatErgebnis = " " + formatErgebnis;
                k = k + 1;
            }

            // Ausgabe als Dezimalzahl im gewünschten Format s. Oben
            // "Dezimalzahlen Darstellung"
            System.out.println("\t" + formatErgebnis);
        }

Danke schon mal für deine Hilfe.

Irgendwie lässt er mich nicht
Code:
String formatErgebnis = abschreibung[i];
setzen, weil er sagt cannot convert from double to string. Wie löse ich das Problem? Das hatte ich jetzt schon mehrfach, dass er sagt cannot convert from double to int zum Beispiel.

Was ich mich noch Frage ist, dass du ganz oben bei
Code:
double []  restbuchwert = restwert();
"Restwert" stehen hast. Was bedeutet das? Ist damit der Restbuchwert einfach gemeint oder wie?

Das ganze sieht bei mir nun so aus:

Code:
        double[] abschreibung = berechnung();
        double[] restbuchwert = restbuchwert();
   
        // Schleifenbeginn ; Array
        for (int i = 0; i < jahr.length; i++) {

            // Funktionsausgabe
            System.out.print(jahr[i]);
   
            System.out.print("\t" + MeinPaket.abschreibung.restbuchwert());

            // Dezimalzahlen Darstellung
            DecimalFormat myFormat = new DecimalFormat(",#00.00 \u00A4\u00A4");

            // Jahr 0 anpassung der leerzeichen, da 0,00 linksbündig war (zu
            // kleine Zahl im Gegensazu zu den anderen)
            String formatErgebnis = abschreibung[i];
            int k = formatErgebnis.length();
            while (k < 13) {
                formatErgebnis = " " + formatErgebnis;
                k = k + 1;
            }

            // Ausgabe als Dezimalzahl im gewünschten Format s. Oben
            // "Dezimalzahlen Darstellung"
            System.out.println("\t" + formatErgebnis);
        }
    }
 

JStein52

Top Contributor
Code:
double []  restbuchwert = restwert();
Das ist der Aufruf deiner Methode restwert() und die liefert ja ein double-Array mit den ganzen restwerten zurück.

Edit:

ach so, ich sehe gerade ich hatte mich verschrieben. Du hast das korrigiert
 

matthias953

Mitglied
Ach so ja. Sorry.

Code:
String formatErgebnis = Double.toString(abschreibung[i]);

Danke.


Code:
double []  restbuchwert = restwert();
Das ist der Aufruf deiner Methode restwert() und die liefert ja ein double-Array mit den ganzen restwerten zurück.

Edit:

ach so, ich sehe gerade ich hatte mich verschrieben. Du hast das korrigiert

Ja ich habe mich schon gewundert, da ich ja keine Restwert Methode habe ^^

Also jetzt meckert der Compiler nicht mehr rum, aber die Zahlen sind nicht mehr formatiert und ebenfalls noch verdreht ;/ . Ich blick echt nicht durch in Java :C

Hier nochmal der gesamte Code:

Code:
package MeinPaket;

import java.text.*;

public class abschreibung {

    // Anschaffungskosten
    static final double anschaffungskosten = 21000;

    // Nutzungsdauer
    static final int nutzungsdauer = 7;

    // linear degressive Abschreibung
    static final double degressiveabschreibung = 0.2;

    // Jahranzeige bis 7 Jahre inkl. Jahr 0
    static int[] jahr = { 0, 1, 2, 3, 4, 5, 6, 7 };

    // Berechnung der Abschreibung und fortlaufende Abschreibung in jeder Zeile
    public static double[] berechnung() {
        double[] abschreibung = new double[nutzungsdauer + 1];
        // double[] restbuchwert = new double[(int) (anschaffungskosten + 1)];

        for (int i = 1; i < jahr.length; i++) {
            abschreibung[i] = anschaffungskosten / nutzungsdauer;
            // restbuchwert[i] = anschaffungskosten - abschreibung[i];

        }
        return abschreibung;
    }

    public static double[] restbuchwert() {
        double[] restbuchwert = new double[(int) (nutzungsdauer + 1)];

        for (int k = 1; k < jahr.length; k++) {
            restbuchwert[k] = anschaffungskosten - (anschaffungskosten / nutzungsdauer);
        }
        return restbuchwert;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        // Überschrift Lineare Abschreibung
        System.out.println("Lineare Abschreibung: ");

        // Überschrift Jahr
        System.out.println("Jahr \t Abschreibung \t Restbuchwert");

        double[] abschreibung = berechnung();
        double[] restbuchwert = restbuchwert();
   
        // Schleifenbeginn ; Array
        for (int i = 0; i < jahr.length; i++) {

            // Funktionsausgabe
            System.out.print(jahr[i]);
   
            System.out.print("\t" + MeinPaket.abschreibung.restbuchwert());
           

            // Dezimalzahlen Darstellung
            DecimalFormat myFormat = new DecimalFormat(",#00.00 \u00A4\u00A4");

            // Jahr 0 anpassung der leerzeichen, da 0,00 linksbündig war (zu
            // kleine Zahl im Gegensazu zu den anderen)
            String formatErgebnis = Double.toString(abschreibung[i]);
            int k = formatErgebnis.length();
            while (k < 13) {
                formatErgebnis = " " + formatErgebnis;
                k = k + 1;
            }

            // Ausgabe als Dezimalzahl im gewünschten Format s. Oben
            // "Dezimalzahlen Darstellung"
            System.out.println("\t" + formatErgebnis);
        }
    }
}


Raus kommt:

Lineare Abschreibung:
Jahr Abschreibung Restbuchwert
0 [D@1db9742 0.0
1 [D@d93b30 3000.0
2 [D@16d3586 3000.0
3 [D@154617c 3000.0
4 [D@a14482 3000.0
5 [D@140e19d 3000.0
6 [D@17327b6 3000.0
7 [D@14ae5a5 3000.0
 

JStein52

Top Contributor
Du hast wieder einen Fehler eingebaut ;);) und wenn der restbuchwert hinten stehen soll musst du die Ausgaben umdrehen:

Code:
// Schleifenbeginn ; Array
        for (int i = 0; i < jahr.length; i++) {

            // Funktionsausgabe
            System.out.print(jahr[i]);
  

            // Dezimalzahlen Darstellung
            DecimalFormat myFormat = new DecimalFormat(",#00.00 \u00A4\u00A4");

            // Jahr 0 anpassung der leerzeichen, da 0,00 linksbündig war (zu
            // kleine Zahl im Gegensazu zu den anderen)
            String formatErgebnis = Double.toString(abschreibung[i]);
            int k = formatErgebnis.length();
            while (k < 13) {
                formatErgebnis = " " + formatErgebnis;
                k = k + 1;
            }

            // Ausgabe als Dezimalzahl im gewünschten Format s. Oben
            // "Dezimalzahlen Darstellung"
            System.out.print("\t" + formatErgebnis);
            System.out.println("\t" + restbuchwert[i]);
          
        }
 

matthias953

Mitglied
Übrigens: das kannst du einfach so aufrufen:
restbuchwert()
weil du das ja in der gleichen Klasse im gleichen package aufrufst.

Achso, ja da hast du Recht, aber erst nachdem ich
Code:
double[] restbuchwert = restbuchwert();
in die Methode eingefügt habe und die damit quasi Importiert habe, richtig?

Also ich habe nun mal geschaut. Die Abschreibung steht nun vorne, so wie es sein soll, jedoch funktioniert der DecimalFormat nicht mehr, da ich die Ausgabe ja in Euro haben möchte und mit zwei Nullen hinter dem Komma(das Fehlt auch noch).

Das mit dem DecimalFormat krieg ich schon irgendwie hin.. mal rumtesten. Was mir noch sorgen macht ist, das bei dem Restbuchwert immer noch so Zahlen wie z.B. : [D@14991ad rauskommen.


EDIT: Die Formatierung zu EUR habe ich wieder hinbekommen.
 

matthias953

Mitglied
Code:
Lineare Abschreibung:
Jahr      Abschreibung      Restbuchwert
0        00,00 EUR       [D@14991ad
1     3.000,00 EUR       [D@d93b30
2     3.000,00 EUR       [D@16d3586
3     3.000,00 EUR       [D@154617c
4     3.000,00 EUR       [D@a14482
5     3.000,00 EUR       [D@140e19d
6     3.000,00 EUR       [D@17327b6
7     3.000,00 EUR       [D@14ae5a5

Also das die Zahlen rechtsbündig und perfekt ausgerichtet sind bekomme ich hin (Die sind auch schon untereinander, jedoch formatiert das Board hier die nochmal falsch). Das mit den komischen Zahlen verstehe ich nicht. Auch nach längerem drauf schauen bin ich ratlos
 

matthias953

Mitglied
Ups, Sorry.

Hier:
Code:
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        // Überschrift Lineare Abschreibung
        System.out.println("Lineare Abschreibung: ");

        // Überschrift Jahr
        System.out.println("Jahr \t Abschreibung \t Restbuchwert");

        double[] abschreibung = berechnung();
        double[] restbuchwert = restbuchwert();
       
        // Schleifenbeginn ; Array
        for (int i = 0; i < jahr.length; i++) {

            // Funktionsausgabe
            System.out.print(jahr[i]);
           
            // Dezimalzahlen Darstellung
            DecimalFormat myFormat = new DecimalFormat(",#00.00 \u00A4\u00A4");

            // Jahr 0 anpassung der leerzeichen, da 0,00 linksbündig war (zu
            // kleine Zahl im Gegensazu zu den anderen)
            Double.toString(abschreibung[i]);
            String formatErgebnis = myFormat.format(abschreibung[i]);
            int k = formatErgebnis.length();
            while (k < 13) {
                formatErgebnis = " " + formatErgebnis;
                k = k + 1;
            }

            // Ausgabe als Dezimalzahl im gewünschten Format s. Oben
            // "Dezimalzahlen Darstellung"
            System.out.print("\t"+ formatErgebnis);
            System.out.println("\t"+ " " + " " + " " + restbuchwert());
 

JStein52

Top Contributor
Code:
System.out.println("\t"+ " " + " " + " " + restbuchwert());
Dachte ich mir. das muss so heissen:
Code:
System.out.println("\t"+ " " + " " + " " + restbuchwert[i]);

Sorry, ich habe den Namen des double-Arrays etwas löd gewählt. das heisst jetzt genauso wie deine Methode restbuchwert() !
 

matthias953

Mitglied
Dachte ich mir. das muss so heissen:
Code:
System.out.println("\t"+ " " + " " + " " + restbuchwert[i]);

Sorry, ich habe den Namen des double-Arrays etwas löd gewählt. das heisst jetzt genauso wie deine Methode restbuchwert() !

// Hat sich erledigt, danke für die Erklärung
Okay. Sieht schon mal besser aus, jedoch verstehe ich nicht was dieses jetzt zu bedeuten hat? Ist das eine Zuweisung der Variable i von
Code:
for (int i = 0; i < jahr.length; i++) {
?
// Ende

Desweiteren habe ich nun das Problem, dass er nicht den neu berechneten Wert , sprich 21.000 - 3.000 = 18.000, dann 18.000 - 3.000 = 15.000 , sondern er macht nur 18.000 überall hin.

Muss ich eine neue Schleife machen und den Code reinkopieren, weil bei Jahr 0 zeigt er Restbuchwert 0 aufgrund der Schleife (da ja bei Abschreibung Jahr 0 wirklich 0 abgeschrieben wird) ?

Danke für deine gute Hilfe!

EDIT:

Code:
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        // Überschrift Lineare Abschreibung
        System.out.println("Lineare Abschreibung: ");

        // Überschrift Jahr
        System.out.println("Jahr \t Abschreibung \t Restbuchwert");

        double[] abschreibung = berechnung();
        double[] restbuchwert = restbuchwert();
       
        // Schleifenbeginn ; Array
        for (int i = 0; i < jahr.length; i++) {

            // Funktionsausgabe
            System.out.print(jahr[i]);
           
            // Dezimalzahlen Darstellung
            DecimalFormat myFormat = new DecimalFormat(",#00.00 \u00A4\u00A4");

            // Jahr 0 anpassung der leerzeichen, da 0,00 linksbündig war (zu
            // kleine Zahl im Gegensazu zu den anderen)
            Double.toString(abschreibung[i]);
            String formatErgebnis = myFormat.format(abschreibung[i]);
            int k = formatErgebnis.length();
            while (k < 13) {
                formatErgebnis = " " + formatErgebnis;
                k = k + 1;
            }

            // Ausgabe als Dezimalzahl im gewünschten Format s. Oben
            // "Dezimalzahlen Darstellung"
            System.out.print("\t"+ formatErgebnis);
            System.out.println("\t"+ " " + " " + " " + restbuchwert[i]);
        }
    }
}

Ausgabe:
Lineare Abschreibung:
Jahr Abschreibung Restbuchwert
0 00,00 EUR 0.0
1 3.000,00 EUR 18000.0
2 3.000,00 EUR 18000.0
3 3.000,00 EUR 18000.0
4 3.000,00 EUR 18000.0
5 3.000,00 EUR 18000.0
6 3.000,00 EUR 18000.0
7 3.000,00 EUR 18000.0


 

JStein52

Top Contributor
Nein, ich denke der Fehler ist in deiner restbuchwert-Methode. Da schreibt er in jedes Array-Element ja den gleichen Wert rein:

Code:
public static double[] restbuchwert() {
        double[] restbuchwert = new double[(int) (nutzungsdauer + 1)];
    
        for (int k = 1; k < jahr.length; k++) {
            restbuchwert[k] = anschaffungskosten - (anschaffungskosten / nutzungsdauer) ;
            System.out.println(restbuchwert[k]);
        }
        return restbuchwert;
 

JStein52

Top Contributor
Probier es mal so:
Code:
public static double[] restbuchwert() {
        double[] restbuchwert = new double[(int) (nutzungsdauer + 1)];
        restbuchwert[0] = anschaffungspreis;
        for (int k = 1; k < jahr.length; k++) {
            restbuchwert[k] = restbuchwert[k-1] - (anschaffungskosten / nutzungsdauer) ;
            //System.out.println(restbuchwert[k]);
        }
        return restbuchwert;
}
 

matthias953

Mitglied
Nein, ich denke der Fehler ist in deiner restbuchwert-Methode. Da schreibt er in jedes Array-Element ja den gleichen Wert rein:

Code:
public static double[] restbuchwert() {
        double[] restbuchwert = new double[(int) (nutzungsdauer + 1)];
   
        for (int k = 1; k < jahr.length; k++) {
            restbuchwert[k] = anschaffungskosten - (anschaffungskosten / nutzungsdauer) ;
            System.out.println(restbuchwert[k]);
        }
        return restbuchwert;

Stimmt. Das heißt doch eigentlich ich muss das so ungefähr machen :

Code:
    public static double[] restbuchwert() {
        double[] restbuchwert = new double[(nutzungsdauer +1)];

        for (int k = 1; k < jahr.length; k++) {
            restbuchwert[k] = berechnung() - (anschaffungskosten / nutzungsdauer);
        }
        return restbuchwert;

Bzw. ich muss ja auf meine Berechnung zurückgreifen, damit er weiß Aha da sind es nur noch 18.000 bzw. 15.000 usw. richtig?
 

JStein52

Top Contributor
Du willst jedes jahr einen bestimmten Betrag vom restbuchwert des vorjahres subtrahiern oder ? Und zwar willst du anschaffungspreis/nutzungsdauer subtrahieren ?
 

matthias953

Mitglied
Also ich hab das mal so probiert wie du das gemacht hast. Es funktioniert...

Ich blick in Java echt nicht durch irgendwie. Voll kompliziert

Ich hätte das so wie von mir oben drüber gepostet gemacht, aber da hätte er gemeckert "The operator - is undefined for the argument type(s) double[] double .

EDIT:

Du willst jedes jahr einen bestimmten Betrag vom restbuchwert des vorjahres subtrahiern oder ? Und zwar willst du anschaffungspreis/nutzungsdauer subtrahieren ?

Genau, richtig. Ich merke gerade das was ich gemacht habe ergibt keinen Sinn. Das wären ja dann 3000 - 3000 ...
 

matthias953

Mitglied
Achso. Was bedeuten denn diese Klammern [] bei Double? Das war doch der Zugriff auf das Array wie du gesagt hattest. Was bedeutet das, wenn dort nichts drin steht?
 

JStein52

Top Contributor
Was bedeutet das, wenn dort nichts drin steht?
Code:
double[] meinArray;

bedeutet das er ein Array namens meinArray dessen Element double's sind anlegt. Damit ist noch nichts über die Grösse des Arrays festgelegt.
Code:
double[] meinArray = new double[10];
legt ebenfalls ein Array an mit 10 Elementen;

Code:
double[] meinArray = berechnen();
legt wieder ein Array an und zwar mit dem Inhalt den die Methode berechnen() zurückliefert.
 

JStein52

Top Contributor

matthias953

Mitglied
Ja, kann ich mir gut vorstellen. Aber schau mal hier:
http://openbook.rheinwerk-verlag.de...tml#dodtp394ff2f8-9134-4eb3-a6b4-469ed4572a74
Ich weiss nicht ob du das kennst? Ist zwar kein Tutorial aber zum Nachschlagen ist das Buch ganz gut und alles online verfügbar. Schau dir mal das Kap. 3 an. Da steht schon viel din.

Danke! Da hab ich auch schon ab und zu reingeschaut, sonst wäre ich gar nicht weitergekommen :) .

Allerdings habe ich noch ein Problem. Die Abschreibungs-Zahlen hat er formatiert in Euro und mit Komma, aber für die Restbuchwert Zahlen tut er das nicht.

Code:
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        // Überschrift Lineare Abschreibung
        System.out.println("Lineare Abschreibung: ");

        // Überschrift Jahr
        System.out.println("Jahr \t Abschreibung \t Restbuchwert");

        double[] abschreibung = berechnung();
        double[] restbuchwert = restbuchwert();
    
        // Schleifenbeginn ; Array
        for (int i = 0; i < jahr.length; i++) {

            // Funktionsausgabe
            System.out.print(jahr[i]);
        
            // Dezimalzahlen Darstellung
            DecimalFormat myFormat = new DecimalFormat(",#00.00 \u00A4\u00A4");

            // Jahr 0 anpassung der leerzeichen, da 0,00 linksbündig war (zu
            // kleine Zahl im Gegensazu zu den anderen)
            Double.toString(abschreibung[i]);
            String formatErgebnis = myFormat.format(abschreibung[i]);
            int k = formatErgebnis.length();
            while (k < 13) {
                formatErgebnis = " " + formatErgebnis;
                k = k + 1;
            }

            // Ausgabe als Dezimalzahl im gewünschten Format s. Oben
            // "Dezimalzahlen Darstellung"
            System.out.print("\t"+ formatErgebnis);
            System.out.println("\t"+ " " + " " + " " + " " + restbuchwert[i]);
        }
    }
}

Ausgabe:
Lineare Abschreibung:
Jahr Abschreibung Restbuchwert
0 00,00 EUR 21000.0
1 3.000,00 EUR 18000.0
2 3.000,00 EUR 15000.0
3 3.000,00 EUR 12000.0
4 3.000,00 EUR 9000.0
5 3.000,00 EUR 6000.0
6 3.000,00 EUR 3000.0
7 3.000,00 EUR 0.0


EDIT: Hab es gelöst. Aber geht das nicht irgendwie schlauer bzw einfacher? Hab das jetzt so gemacht:

Code:
public static void main(String[] args) {
        // TODO Auto-generated method stub

        // Überschrift Lineare Abschreibung
        System.out.println("Lineare Abschreibung: ");

        // Überschrift Jahr
        System.out.println("Jahr \t Abschreibung \t Restbuchwert");

        double[] abschreibung = berechnung();
        double[] restbuchwert = restbuchwert();
       
        // Schleifenbeginn ; Array
        for (int i = 0; i < jahr.length; i++) {

            // Funktionsausgabe
            System.out.print(jahr[i]);
           
            // Dezimalzahlen Darstellung
            DecimalFormat myFormat = new DecimalFormat(",#00.00 \u00A4\u00A4");

            // Jahr 0 anpassung der leerzeichen, da 0,00 linksbündig war (zu
            // kleine Zahl im Gegensazu zu den anderen)
            Double.toString(abschreibung[i]);
            Double.toString(restbuchwert[i]);
            String formatErgebnis = myFormat.format(abschreibung[i]);
            String formatErgebnisRestbuchwert = myFormat.format(restbuchwert[i]);
            int k = formatErgebnis.length();
            while (k < 13) {
                formatErgebnis = " " + formatErgebnis;
                k = k + 1;
            }

            // Ausgabe als Dezimalzahl im gewünschten Format s. Oben
            // "Dezimalzahlen Darstellung"
            System.out.print("\t"+ formatErgebnis);
        //Stem.out.print("\t\t\t" + formatErgebnisRestbuchwert);
            System.out.println("\t"+ " " + " " + " " + " " + formatErgebnisRestbuchwert);
        }
    }
}
 
Zuletzt bearbeitet:

JStein52

Top Contributor
Ja, weil du dafür ja auch noch keine Formatierung durchführst. Da wirst du das gleiche machen müssen wie für abschreibung. So etwa:

Code:
String formatErgebnisAbschreibung = myFormat.format(abschreibung[i]);
            int k = formatErgebnisAbschreibung.length();
            while (k < 13) {
                formatErgebnisAbschreibung = " " + formatErgebnisAbschreibung;
                k = k + 1;
            }
String formatErgebnisRestwert = myFormat.format(restbuchwert[i]);
            int k = formatErgebnisRestwert.length();
            while (k < 13) {
                formatErgebnisRestwert = " " + formatErgebnisRestwert;
                k = k + 1;
            }
            // Ausgabe als Dezimalzahl im gewünschten Format s. Oben
            // "Dezimalzahlen Darstellung"
            System.out.print("\t"+ formatErgebnisAbschreibung);
            System.out.println("\t"+ " " + " " + " " + " " + formatErgebnisRestwert);
 

matthias953

Mitglied
Ja, weil du dafür ja auch noch keine Formatierung durchführst. Da wirst du das gleiche machen müssen wie für abschreibung. So etwa:

Code:
String formatErgebnisAbschreibung = myFormat.format(abschreibung[i]);
            int k = formatErgebnisAbschreibung.length();
            while (k < 13) {
                formatErgebnisAbschreibung = " " + formatErgebnisAbschreibung;
                k = k + 1;
            }
String formatErgebnisRestwert = myFormat.format(restbuchwert[i]);
            int k = formatErgebnisRestwert.length();
            while (k < 13) {
                formatErgebnisRestwert = " " + formatErgebnisRestwert;
                k = k + 1;
            }
            // Ausgabe als Dezimalzahl im gewünschten Format s. Oben
            // "Dezimalzahlen Darstellung"
            System.out.print("\t"+ formatErgebnisAbschreibung);
            System.out.println("\t"+ " " + " " + " " + " " + formatErgebnisRestwert);


Jup, hab ich mir gedacht. Ich lerne definitiv dazu! Und zwar mehr von dir als von meinem Prof :p

Das war's erstmal für heute... ich muss noch zwei andere Abschreibungen machen in dem Programm, aber dafür habe ich heute glaube ich keinen Nerv mehr. :)

Ich danke dir recht herzlich für deine Zeit und deine Hilfe! Von dir müsste es mehr Menschen geben :p
 

JStein52

Top Contributor
Kleiner Hinweis noch. Diese zwei Zeilen
Code:
Double.toString(abschreibung[i]);
Double.toString(restbuchwert[i]);
brauchst du jetzt natürlich nicht mehr.
 

JStein52

Top Contributor
Nein, du bist nicht blöd aber dir fehlt noch ein bisschen Verständnis dafür. Das kommt schon.
Und diese zwei Anweisungen brauchst du nicht mehr weil sie da quasi nix tun. Sie wandeln zwar den i.ten Wert im jeweiligen double-Array in einen String um. Aber mit diesem umgewandelten String wird ja nichts gemacht. Es wäre der return Wert der toString(...)-Methode.
etwas sinnvolles würde dann z.B. so aussehen:

Code:
String meinString = Double.toString(abschreibung[i]);
.

Aber natürlich auch nur wenn mit meinString dann auch was gemacht wird.
Aber wenn du gerade zu viel hast dann darfst du dich gerne auch später wieder mal melden um Fragen zu klären.
 

matthias953

Mitglied
Nein, du bist nicht blöd aber dir fehlt noch ein bisschen Verständnis dafür. Das kommt schon.
Und diese zwei Anweisungen brauchst du nicht mehr weil sie da quasi nix tun. Sie wandeln zwar den i.ten Wert im jeweiligen double-Array in einen String um. Aber mit diesem umgewandelten String wird ja nichts gemacht. Es wäre der return Wert der toString(...)-Methode.
etwas sinnvolles würde dann z.B. so aussehen:

Code:
String meinString = Double.toString(abschreibung[i]);
.

Aber natürlich auch nur wenn mit meinString dann auch was gemacht wird.
Aber wenn du gerade zu viel hast dann darfst du dich gerne auch später wieder mal melden um Fragen zu klären.

Danke für die Erklärung. Leider hast du Recht und ich bin im Uni Stress, da ich ein duales Studium mache und unter der Woche noch arbeiten muss und jeweils Donnerstags und Samstags bis abends in die Uni muss.

Ist das so, weil ich vorher versucht habe einen neuen String zu machen mit Abschreibung und Restbuchwert, aber dann im Endeffekt in den vorhanden String meine Abschreibung und den Restbuchwert reingemacht habe?

Auf dein Angebot werde ich gerne wieder zurückkommen, vielleicht nicht heute, aber definitiv in den nächsten Tagen wenn mir hier und da mal wieder ein Problem begegnet das ich nicht lösen kann.
 

JStein52

Top Contributor
Ist das so, weil ich vorher versucht habe einen neuen String zu machen mit Abschreibung und Restbuchwert, aber dann im Endeffekt in den vorhanden String meine Abschreibung und den Restbuchwert reingemacht habe?
Ja genau. Du hattest vorher mal eine Version wo du die doubles als String gebraucht hattest, Und dafür waren die zwei Statements gedacht. Aber der format-Methode kannst du die Zahlen als double übergeben:

Code:
myFormat.format(abschreibung[i])

Und deshalb brauchst du das andere nicht. Und das klingt ja ganz schön stressig was du da machst.
 
X

Xyz1

Gast
Mal 'ne Dumme Frage... Ist das mit Verzinsung? Wird erst abgeschrieben, dann verzinst - oder wird erst verzinst, dann abgeschrieben? Bin da nicht so firm drin. :D
 

TheFrog

Aktives Mitglied
@matthias953 ich möchte dir jetzt nicht den Tag verderben aber:

1.) wenn du schon die Grundlagenvorlesungen aus dem ersten Semester als "Stress" empfindest..
2.) eine Vorlesung dient mehr der kurzen Wiederholung des Stoffs und als Diskussionsplattform. Professoren erwarten, dass du dich daheim mit der Literatur befasst und vorbereitet in die Vorlesung kommst. (FH/Uni != Schule)
3.) es ist also deine Aufgabe dir den Stoff beizubringen und nicht die des Professors!
4.) Suche den Fehler bei dir und nicht bei anderen..

Positiv finde ich, dass du die Initiative ergriffen hast selbst aktiv zu werden und dich hier im Forum meldest.

Einen schönen Sonntag :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I File Uploader... Statusanzeige, Berechnung des Status etc. Java Basics - Anfänger-Themen 0
Bugs Bunny Fehlerhafte Berechnung beim erneuten Durchlaufen der Schleife Java Basics - Anfänger-Themen 5
Jamie logische Verknüpfung zur Schaltjahr-Berechnung Java Basics - Anfänger-Themen 30
Stephan_kl Reihenwert-Berechnung, Ergebnis mit vorherigem Ergebnis vergleichen Java Basics - Anfänger-Themen 11
Abraham42 Berechnung der Kühlung Java Java Basics - Anfänger-Themen 12
S Hashcode-Berechnung + ^ Java Basics - Anfänger-Themen 2
J Median-Berechnung von 2D-Teilarrays Java Basics - Anfänger-Themen 56
F Tabelle - Berechnung Rang Java Basics - Anfänger-Themen 2
B Berechnung der Position von Kinderelemente von einem Elternknoten Java Basics - Anfänger-Themen 23
S Berechnung der sleep time ist falsch Java Basics - Anfänger-Themen 46
S Switch-Case zur Berechnung der Einkommensteuer Java Basics - Anfänger-Themen 15
F Berechnung der Rektaszension und Deklination eines Sterns Java Basics - Anfänger-Themen 7
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
V Erste Schritte Pi Berechnung Java Basics - Anfänger-Themen 47
M Berechnung der Reststrecke bei Graphen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
B Berechnung zu einer Schleife formen Java Basics - Anfänger-Themen 6
B Berechnung Median mit Methode Java Basics - Anfänger-Themen 7
CptK Methoden Berechnung von Anfangsgeschwindigkeit und Winkel Java Basics - Anfänger-Themen 27
K Erste Schritte Berechnung der Summe zweier Arrays Java Basics - Anfänger-Themen 15
S Erste Schritte Berechnung des Paketportos - Problem/Frage Java Basics - Anfänger-Themen 52
J Gleitkommazahlen, Berechnung von pi Java Basics - Anfänger-Themen 4
J Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
kilopack15 Verzweiflung wegen Berechnung mit Multithreading Java Basics - Anfänger-Themen 1
A Die Werte zur Berechnung müssen als Parameter übergeben werden? Java Basics - Anfänger-Themen 7
Salo Berechnung von Winkeln Java Basics - Anfänger-Themen 28
Ghostman1711 Pi berechnung Methode aufrufen Java Basics - Anfänger-Themen 2
L Rekursive Methode zur Berechnung der Potenz q hoch p Java Basics - Anfänger-Themen 17
beatles Operatoren Operatoren - Berechnung Java Basics - Anfänger-Themen 40
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
N Verzögerte Berechnung "Lazy" Java Basics - Anfänger-Themen 8
J Erste Schritte Rundungsproblem - Berechnung Notendurchschnitt Java Basics - Anfänger-Themen 13
S Variablen Vektor zur Berechnung verwenden Java Basics - Anfänger-Themen 4
T Java double berechnung fehler Java Basics - Anfänger-Themen 2
M Berechnung in Java Java Basics - Anfänger-Themen 4
S Berechnung der Arbeitstage in einem Zeitraum Java Basics - Anfänger-Themen 9
E Problem bei rekursiver Berechnung des Binomialkoeffizienten Java Basics - Anfänger-Themen 5
T Iterative Pi Berechnung in Rekursive Java Basics - Anfänger-Themen 2
S Double, int, Berechnung Java Basics - Anfänger-Themen 3
C Nach Berechnung runden und Wert ausgeben Java Basics - Anfänger-Themen 7
E Berechnung für Shop einbinden Java Basics - Anfänger-Themen 8
S Klassen Formel zur Berechnung .... Bitte um Hilfe Java Basics - Anfänger-Themen 7
S Euklid Algorithmus zur Berechnung des GGTs Java Basics - Anfänger-Themen 2
OnDemand Berechnung in die start und paint Methode eines Applets Java Basics - Anfänger-Themen 28
P Schleife zur Berechnung von einer Summe Java Basics - Anfänger-Themen 16
F Berechnung einer linearen Abschreibung Java Basics - Anfänger-Themen 5
E Berechnung von Punkten Java Basics - Anfänger-Themen 4
D Berechnung des Abstandes von zwei Punkten in einem Koordinatensystem Java Basics - Anfänger-Themen 14
A Methoden PI-Berechnung Java Basics - Anfänger-Themen 22
S Erste Schritte Berechnung mit Daten aus CSV und Date Objekt Java Basics - Anfänger-Themen 2
C Programm zur Berechnung der Spur einer Matrix Java Basics - Anfänger-Themen 4
P Pythagoras Baum - Berechnung der Punkte Java Basics - Anfänger-Themen 9
A Erste Schritte Steuer Berechnung, Alters Abhängig Java Basics - Anfänger-Themen 5
T Erste Schritte Berechnung von gerade und ungerade Zahlen Java Basics - Anfänger-Themen 10
J Erste Schritte Berechnung Ratten vermehrung Java Basics - Anfänger-Themen 4
P falsches ergebnis bei einfacher berechnung Java Basics - Anfänger-Themen 3
T Iterative Berechnung einer Satellitenbahn Java Basics - Anfänger-Themen 20
M Java Berechnung mit mehreren Lösungen? Java Basics - Anfänger-Themen 9
D Nullstellen-Berechnung Java Basics - Anfänger-Themen 10
L Fehlermeldung bei falscher Berechnung anzeigen Java Basics - Anfänger-Themen 31
A berechnung multiplikatives inverses Java Basics - Anfänger-Themen 5
J Berechnung des aktuellen Alters auf Basis des Geburtstags Java Basics - Anfänger-Themen 45
J Datentypen Fehler bei Berechnung mit Double und Int-Werten Java Basics - Anfänger-Themen 22
G Berechnung von Winkeln mit Cosinussatz Java Basics - Anfänger-Themen 2
B Arrays verwenden für Berechnung Java Basics - Anfänger-Themen 3
R Merkwürdige Modulo Berechnung Java Basics - Anfänger-Themen 7
B Hausaufgabe Berechnung quadratischer Funktion Java Basics - Anfänger-Themen 16
U Alter Berechnung + sortierung Java Basics - Anfänger-Themen 6
P Berechnung wird nicht durchgeführt Java Basics - Anfänger-Themen 2
D Berechnung von Ostern und Ramadan! Java Basics - Anfänger-Themen 24
N Algorithmus für Berechnung einer Quersumme Java Basics - Anfänger-Themen 9
D Berechnung von Geldausgabe Java Basics - Anfänger-Themen 22
F Berechnung von Kugeln! Java Basics - Anfänger-Themen 9
M rekursive Funktion zur Berechnung der Spiegelzahl Java Basics - Anfänger-Themen 7
S Hausaufgabe: Java-Programm schreiben zur Berechnung von x und y Java Basics - Anfänger-Themen 9
Y Ergebnis einer Berechnung an die Main Methode übergeben Java Basics - Anfänger-Themen 11
Semox Ersten Wert eines Intervalls bei Berechnung einschließen Java Basics - Anfänger-Themen 8
J Logarithmische Berechnung und Arrays Java Basics - Anfänger-Themen 2
B LinkedList - Berechnung des Produkts Java Basics - Anfänger-Themen 6
B Berechnung von Preisen per Java-Programm Java Basics - Anfänger-Themen 27
M Alters berechnung aus Geburtsjahr aus dem Buch Java Basics - Anfänger-Themen 5
O Fehler in der String-Distanz-Berechnung Java Basics - Anfänger-Themen 5
-horn- "Berechnung vorwärts, Optimierung rückwärts?" - Wie würdet ihr das machen? Java Basics - Anfänger-Themen 8
P iterative Berechnung Java Basics - Anfänger-Themen 9
1 Berechnung von PI mithilfe von Buffons Nadelproblem Java Basics - Anfänger-Themen 2
G Berechnung zwei Komplexen Zahlen Java Basics - Anfänger-Themen 34
N Rekursive Berechnung der Höhe eines binären Baumes Java Basics - Anfänger-Themen 4
J Programm für interaktive Berechnung von Temperaturverläufen Java Basics - Anfänger-Themen 9
K Annährende ganzzahlige Berechnung der Wurzel Java Basics - Anfänger-Themen 8
L Berechnung von Perioden Java Basics - Anfänger-Themen 4
D einfach berechnung einer onlinezeit Java Basics - Anfänger-Themen 25
S Euklid Klasse mit Methoden zur Berechnung des ggT Java Basics - Anfänger-Themen 23
G Frage zur Primzahlen berechnung Java Basics - Anfänger-Themen 11
G Berechnung von N-Tageslinien von Aktienkursen Java Basics - Anfänger-Themen 13
G Rekursive Berechnung von n über k schlägt fehl Java Basics - Anfänger-Themen 5
G Einfache Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
W Schaltjahr Berechnung Java Basics - Anfänger-Themen 24
A Probleme mit Programm zur Pi-Berechnung Java Basics - Anfänger-Themen 6
X Temperatur-Berechnung /Array(?) Java Basics - Anfänger-Themen 5
L Berechnung Summe Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben