ein Vector mit verschiedenen Werten auslesen und berechnen

Status
Nicht offen für weitere Antworten.

babel

Aktives Mitglied
servus! so ich habe ein problem und zwar erstmal bin ich ein neuling in java und brauch trotzdem dringend eine lösung 🙁 und zwar hab ich einen vector in dem ich 3 verschiedene werte habe: datum, betrag und kapital und ich möchte die differenz der einzelnen daten herausfinden bsp vector.elementAt(0) = 09.04.2009 und vector.elementAt(4) = 23.08.2009 usw den ich brauch diese werte für meine verzinsung, ich bedanke mich schon im voraus hier schonmal mein noobcode ... ich weiss echt net weiter :/[HIGHLIGHT="Java"] public void abschluss()
{
wert = eingabe14.getText();
for(int i = 0; i < vec.size(); i+=3)
{
if(vec.elementAt(i) instanceof String)
{
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");

Date heute = new Date();
// format.format(new Date());
// System.out.println(format.format(new Date()));
// Date heute = null;
Date date = null;

if(wert.trim().equals("0"))
{
System.out.println("Bitte versuchen Sie erneut");
}
else
{
try {
System.out.println("Sie haben den test bestanden");
date = format.parse(wert);
date = format.parse((String) vec.elementAt(0));
// heute= format.parse(wert2);
// heute= format.parse(superstring);
datumlong = date.getTime();
// heutelong = Long.parseLong(format.format(new Date()));
heutelong = heute.getTime();
differenz = datumlong - (heutelong + differenz);

tage = ((((differenz / 1000) / 60) / 60) / 24);
datum = Long.toString(tage);
tageszahl = (int) tage;
eingabe15.setText(datum);

} catch (ParseException e) {
e.printStackTrace();
}
}
}

System.out.println(vec.elementAt(0));
for(int j = 1; j < vec.size(); j+=3)
{
if(vec.elementAt(i) instanceof Transaktion)
{
if(tageszahl > 0)
{
kn = ((((neuvermoegen2 * prozentsatzwert) / 365) * tageszahl) + neuvermoegen2);
kapitalneu = ((((kn * prozentsatzwert) / 365) * tageszahl) + neuvermoegen2);
zinswert = kapitalneu - neuvermoegen2;
if(betrag < 0)
{
kn = 0;
kn = neuvermoegen2 + zinswert;// + betrag;
}
else if(betrag > 0)
{
kn = 0;
kn = neuvermoegen2 + zinswert;// - betrag;
}
}
}
}
}

zins = Double.toString(zinswert);
kapital = Double.toString(kn);
ausgabe14.setText(kapital);
ausgabe16.setText(superstring);
}[/HIGHLIGHT]
 
Zuletzt bearbeitet von einem Moderator:
Tipp: mache erstmal keine Zinsverarbeitung sondern modeliere nur die Daten um,

durchlaufe den Vector, nimm jeweils drei Daten und stecke diese in eine neue Klasse
'KapitalZeitpunkt' oder so, mit richtigen String, Date usw.

viel Casting und/ oder SimpleDateFormat-Parsen sollte also aus der eigentlichen Logik wegfallen in eine vorgelagerte Umwandlung,
dann hast du danach nur noch eine Liste/ Vector von KapitalZeitpunkt-Objekten und kannst mit denen weiterarbeiten,


falls bei einem der beiden Abschnitte Probleme bestehen, dann poste den dazu passenden Code und das genaue aktuelle Problem,
etwa die Berechnung des Zeitabstands in Tagen?

nur langen durchmischten Code und 'geht nicht', das geht ja nicht
 
big thx schonmal 😀 ich hocke hier seit freitag morgen und bin langsam am verzweifeln aber ich versuch das mal mit deinem weg ^^
 
so ich habe schonmal eine classe names transaktion und die sieht bei mir so aus:
[highlight="Java"]public class Transaktion implements Umsatz{

private double wert = 0;
private double wert2= 0;
private String transdatum = "";
public int anzahl = 0;

public Transaktion(String transdatum, double wert, double wert2)
{
this.transdatum=transdatum;
this.wert = wert;
this.wert2= wert2;
}

public double getUmsatz()
{
return wert;
}
public String getDatum()
{
return transdatum;
}
public double getKapital()
{
return wert2;
}
}
und die werte übergebe ich in meiner classe wo mein gui ist mit hilfe von:
vec.add(new Transaktion(wert,umsatzzahlen,kn));

for(int i = 0; i < vec.size(); i++)
{
if(vec.elementAt(i) instanceof Transaktion)
{
umsatzdouble = ((Transaktion)vec.elementAt(i)).getUmsatz();
datumdouble = ((Transaktion)vec.elementAt(i)).getDatum();
kn =((Transaktion)vec.elementAt(i)).getKapital();
allewerte.add(datumdouble);
allewerte.add(umsatzdouble);
allewerte.add(kn);
}
}[/highlight]
sieht das schonmal gut aus? oder thema ganz verfehlt? ^^
 
Zuletzt bearbeitet von einem Moderator:
ohne Frage in jedem Fall Posting verfehlt 😉

die letzten 10 Zeilen verstehe ich nicht so richtig, wieso machst du aus einem Transaktion-Vector wieder eine Liste mit den Einzelwerten?
das sollte doch gerade verhindert werden,
 
weil wenn ich so mit dem vector vec arbeite kommt bei mir als ausgabe [Transaktion@19ee1ac, Transaktion@15f5897] und so hab nach dem ich das alles an vec übergeben habe dann in das allewerte kopiert und er gibt mir auch normale werte raus, mein problem ist auch noch ich weiss nicht wie ich das zuweisen soll also mit den daten weil ich brauch die differenz von 2 daten...
 
die Anzahl Tage zwischen zwei Dati berechnet man am besten separat in einer statischen Methode, z.B.
Code:
    public static int daysDiff(Date fromDate, Date toDate)
    {
        // +12 Stunden damit sicher gegenüber Sommer-/ Winterzeitwechsel
        long days = (toDate.getTime() - fromDate.getTime() + MILLISECONDS_OF_DAY_HALF) / MILLISECONDS_OF_DAY;
        return (int)days;
    }
 
würde das nicht funktionieren?
[HIGHLIGHT="Java"]wert = eingabe14.getText();
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
heute = format.parse(wert);

datestring = allewerte.get(i).toString();
date = format.parse(datestring);

differenz = datestring - (heute.getTime() + differenz);

[/HIGHLIGHT]
 
Zuletzt bearbeitet von einem Moderator:
wie ich ursprünglich sagte: das Problem sollte nichts mit dem Parsen von Strings zu tun haben,
mach das einmal irgendwo ganz früh und dann im interessanten Teil des Programms arbeite nur noch mit Dates,
das Konzept ist aber vielleicht zu schwer zu verstehen

-----

> differenz = datestring - (heute.getTime() + differenz);

datestring scheint ein String zu sein, 'String minus irgendwas' gibts schon mal gar nicht in Java, damit erübrigt sich alles weitere
 
das sieht schonmal gut bei dir aus ^^ aber nur eine frage wie weiss ich von meinem vector die datumwerte zu dem toDate und fromDate zu, in meinem vector weiss ich das der erste wert das datum ist.

[HIGHLIGHT="Java"]
public static int daysDiff(Date fromDate, Date toDate)
{
for(int i = 0; i < allewerte.size(); i+=3)
{
allewerte.get(i);
}
[/HIGHLIGHT]
ich will nur noch irgendwie den inhalt aus allewerte.get(i) an toDate und fromDate zuweisen :/ sorry wenn ich verblödet rüberkomme aber bei mir war atm viel los und bekomme einfach keinen klaren kopf 🙁
 
Zuletzt bearbeitet von einem Moderator:
ich weiß nicht, was in deinem Vector drin ist, aber

1. hat das bestimmt nichts mit der Methode daysDiff() zu tun, allerhöchstens mit dessen Aufrufer,
der sich überlegen muss, welche beiden Dates er der Methode übergibt,
daysDiff() selber bleibt unverändert

2. wie ich schon x-mal sage: die Dates aus dem Vector zu extrahieren ist eine ganz andere Aufgabe,
die solltest du weder mit daysDiff() noch Zinsberechnung noch sonst irgendwas sinnvollen mischen,

erst die Dates extrahieren, ob wie vorgeschlagen in eine neue Klasse KapitalZeitpunkt geschrieben oder in lokale Variablen ist egal,

aber erst wenn
Data a = ..;
Date b = ..;
feststeht, und man nicht mehr über Vektoren nachdenken muss,
erst an genau dieser Stelle fängt ein anderer Teil des Programms an,

denn wenn man die Dates a und b hat, ist es z.B. leicht, die Differenz in Tagen auszurechnen:
int tage = Helper.daysDiff(a,b);

siehst du, wie dieser Code absolut nichts mit Vektoren zu tun hat? so geht programmieren


kann gut sein, dass du nun wieder nichts verstanden hast, manchmal gehts einfach nicht,
viel öfter werde ich es nicht wiederholen 😉
 
big thx ^^ habs zum laufen gebracht -_- unglaublich! 😀 mein problem ist nur ich bin noch net ganz in der materie drin und denke irgendwo zu kompliziert wobei es viel einfacher gehen kann ^^ also thx (=
 
so hu nochmal ^^

ich stehe hier vor einer weiteren schwierigkeit und zwar brauch ich die tageszinsen, die jahreszinsen funktionieren bei mir einwandfrei aber wie berechne ich die tageszinsen, gibts da irgendwie auch so eine funktion?

[HIGHLIGHT="Java"]
if(jahreszahl > 0)
{
kapitaln = getkapital * (Math.pow(1+(prozentsatzwert/100),tageszahl));
zinswert = kapitaln - getkapital;
}

if(tageszahl > 0)
{
//hier das Problem ^^
kapitaln = getkapital * (Math.pow(1+(prozentsatzwert/100),tageszahl));
zinswert = kapitaln - getkapital;
}
[/HIGHLIGHT]
 
was du rechnen willst, musst du schon selber wissen oder in einem BWL-Forum nachfragen..,

denkbar ist Jahreszins * Anzahl Tage / 365
 
was du rechnen willst, musst du schon selber wissen oder in einem BWL-Forum nachfragen..,

denkbar ist Jahreszins * Anzahl Tage / 365
Falsch, ein bankfachliches Jahr hat 360 Tage, 30 pro Monat
d.h. für den Code, dass von 28. Feb -> 1. März 3 Tage vergehen
und von 30. Jan auf 31. Jan 0 Tage!

Edit:
d.h. --> prozentVomjahr = ((aktuellerMonat - 1) * 30 + (aktuellerTag > 30 ? 30 : aktuellerTag)) / 360;
 
An den Geldmärkten im Euroland ist mittlerweile die Methode act/360 üblich.
Im Normalfall wird der erste Tag (der Tag der Aufnahme des Zinsgeschäfts) nicht miteingerechnet.
ok, das wäre dann noch einfacher 🙂
prozentVomjahr = ((aktuellerMonat - startMonat) * 30 + (aktuellerTag - startTag)) / 360
(sollte auch stimmen wenn startTag > aktuellerTag)
 
also, die Formel für die Zinsberechnung ist nunmal
Code:
     K * p * t
z = ----------
    100 * 360
d.h.:
Code:
t = (aktuellerMonat - startMonat) * 30 + aktuellerTag - startTag
was wiederum heisst
Code:
    K * p * ((aktuellerMonat - startMonat) * 30 + aktuellerTag - startTag)
z = ----------------------------------------------------------------------
                                 100 * 360
klar?
 
Zuletzt bearbeitet:
joah ^^ da bin ich schonmal durchgekommen (= nur noch ne andere frage wie kann ich auf den inhalt der objekte die in einem vector drin sind zugreifen? oO
 
ein Objekt holst du mit get aus einem Vector raus:
Object o = vector.get(index);
evtl. noch auf den richtigen Typ casten

dann ganz normal drauf zugreifen, wie man das bei einem Objekt so macht,

etwas wie 'auf den inhalt der objekte die in einem vector drin sind zugreifen' gibt es einfach nicht
 
das ist die falsche frage ;-)

die frage ist, wer steckt sie da rein? und vor allem warum macht jemand sowas schreckliches?
 
das mit vector.get(index) ist klar 😀 aber da kommt halt nur als ausgabe das objekt was in dem vector drin ist und nicht der inhalt der objekte ^^ und wer sowas schreckliches macht? mein chef dipl. informatiker ...
 
das ist die falsche frage ;-)

die frage ist, wer steckt sie da rein? und vor allem warum macht jemand sowas schreckliches?

Hehe das dachte ich auch 😉

Man könnte wenigstens, wenn möglich, einen parametrisierten Vector verwenden.
Also [HIGHLIGHT="Java"]
Vector<String> vector = new Vector<String>();
[/HIGHLIGHT]
 
habs anders gelöst und zwar mit nem neuem vector und die werte von dem einem in das andere kopiert und jetzt funktioniert alles
 
mein chef dipl. informatiker ...
der kommt wahrscheinlich aus der c/c++ welt... nur weil man mit der sprache java programmiert, heißt das noch lange nicht, dass man auch java programmiert. man kann mit java auch sehr schöne c style programme schreiben...

also meine meinung. mehrere werte unterschiedlichen typs... da sollte man sich ein objekt machen das die werte darstellt. name, alter und addresse zb -> Objekt person...
 
so ich hab das schonmal alles zum laufen gebracht ^^ fehlt nur noch die ausgabe. mein problem ist ich habe erstmal einen String mit den meinen ganzen transferdaten: bsp datum, betrag und dann saldo das funktioniert erstmal aber wenn ich so nach der methode geh hab ich später mehrere werte in einer zelle ausgegeben und ich möchte halt das irgendwie splitten und in der nächsten zeile ausgeben usw.

[HIGHLIGHT="Java"]

String rowData[][] = {{"" + postbank.getTransaktionsDatum(), "" + postbank.getBetrag(), "" + postbank.getAbschlussKontostand()}};

String[] columnnames = {"Datum " , "Betrag in € " , "Saldo in € "};

JTable tabelle = new JTable(rowData, columnnames);

[/HIGHLIGHT]

könnte mir da jemand irgendwie einen bsp code geben? weiss irgendwie nicht weiter :/
 
so ich habe schonmal alle werte drin die ich brauche so sieht das bei mir aus:
Link: http://www.250kb.de/u/090414/j/2aac37c4.jpg
das problem ist halt das ich zwar die werte habe aber immer mehrere in einer zelle und ich bräuchte bei einer ausgabe das ein wert in einer zelle erstellt wird und dann eine neue zeile hinzugefügt mit neuem wert usw

das ist das der code was ich bis jetzt zustande gebracht habe:

[HIGHLIGHT="Java"]

String datenzeile[][] = {{"" + postbank.getVectorDatum(), "" + postbank.getVectorBetrag(), "" + postbank.getVectorSaldo()}};

String[]columnnames = {"Datum " , "Betrag in € " , "Saldo in € "};

JTable tabelle = new JTable(datenzeile,columnnames);

[/HIGHLIGHT]

ahhh und die daten die ich dem stringarray datenzeile übergebe werden in vectoren gespeichert jeweils ein vector für datum, betrag und saldo.
 
Ich finde das mit dem Vector immer noch schrecklich und unflexibel, aber was solls.

Du musst deine Datenzeile mit den einzelnen Werten der Vectoren befüllen, also etwa so:
Java:
String[][] datenzeile = new String[3][postbank.getVectorDatum().size()];
for(int i; i < postbank.getVectorDatum().size();i++){
 datenzeile[0][i] = String.valueOf(postbank.getVectorDatum().get(i));
 datenzeile[1][i] = String.valueOf(postbank.getVectorBetrag().get(i));
 datenzeile[2][i] = String.valueOf(postbank.getVectorSaldo().get(i));
}
 
fast richtig 😀 dankeschön hatte aber die lösung etwas früher ^^

hier ist der code

[HIGHLIGHT="Java"]

String rowData[][] = new String[postbank.getVectorDatum().size()][3];

for(int i = 0, j = 0; i < postbank.getVectorDatum().size(); i++, j++)
{
rowData[0] = (String) postbank.getVectorDatum().get(i);
rowData[1] = String.valueOf(postbank.getVectorBetrag().get(i));
rowData[2] = String.valueOf(postbank.getVectorSaldo().get(i));
}

String[]columnnames = {"Datum " , "Betrag in € " , "Saldo in € "};

JTable tabelle = new JTable(rowData,columnnames);

[/HIGHLIGHT]
 
garnicht hatte erstmal vorgehabt mit 2 arrays zu arbeiten dann anders überlegt zum glück auch -_- wurde also entfernt 😛
 
so ich habe ein riesen problem und zwar ist meine verzinsung falsch kann mir da irgendwie jemand helfen? und zwar nimmt er mir nicht den richtigen saldowerte :/ also ist die zuweisung falsch.... hier ist erstmal der code

[HIGHLIGHT="Java"]
for(int i = 1, j = 1, z = 0; i < vectortage.size(); i++, j++, z++)
{
if(endkapital == 0)
{
kontostand = (Double) vectorsaldo.get(1);

zinswert = ((Double) vectorsaldo.get(1) * prozent * (Integer) vectortage.get(j)) / (100 * 360);
endkapital = ((Double) vectorsaldo.get(1) + zinswert) + buchung;
}
else
{
kontostand = endkapital;

zinswert = (kontostand * prozent * (Integer) vectortage.get(j)) / (100 * 360);
endkapital = ((kontostand + zinswert) + buchung);
}
}
[/HIGHLIGHT]
 
so bei mir funktioniert schonmal alles richtig gut ausser es gibt da nur noch eine sache mein vector stimmt nicht ganz und zwar sieht das bei mir so aus ich habe eine funktion in dieser funktion füll ich einen vector mit werten also vectortage und dann in einer anderen funktion füg ich noch das letzte datum also für den jahresabschluss hinzu und mein problem ist jetzt mir fehlt ein wert und meine frage wäre wie kann ich einen vector wenn der schon z. B. mit 4 werten gefüllt ist eine 0 setzen und zum schluß noch meinen letzten wert also das der vorletzte wert dieses vectors dieses 0 ist
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben