Keskustelut - Java - Aloittelija tarvitsee apua... [1 / 3]


Sivu: 1, 2, 3
seuraava sivu » 
tikanmaa 18:12 9.11.09 
Kertokaahan mikä tässä mättää. Tarkoitus tosiaan olisi että lainaa lyhennetään kaksi kertaa vuodessa sekä korko maksetaan kaksi kertaa vuodessa. Lisäksi pitäisi ohjelmaa muokata niin että siihen voitaisiin syöttää montako kertaa vuodessa lyhennys maksetaan ja ohjelma laskisi automaattisesti lyhennykset lyhennyskertojen mukaan oikein. Miten tämä tehdään?





public static void main(String[] args) {

int vuosi;
int lyhennys;
int lainamaara;
float lainavuodet;
float maksuera;
float korko;
float korkopros;
float korkoyht;
float lyhennysyht;
float maksettavayht;

Scanner nappaimisto;

korkoyht=0;
lyhennysyht=0;
maksettavayht=0;
vuosi=0;

Locale.setDefault(Locale.ENGLISH);
nappaimisto = new Scanner(System.in);

System.out.println("Asuntolainalaskuri");

System.out.println("Anna lainamäärä?");
lainamaara = nappaimisto.nextInt();

System.out.println("Anna laina-aika?");
lainavuodet = nappaimisto.nextFloat();

System.out.println("Anna vuotuinen korko?");
korko = nappaimisto.nextFloat();

if (lainavuodet > 0){
lyhennys = lainamaara / lainavuodet / 2;
}
else{
lyhennys = 0;
}


System.out.print("");
System.out.print("");
System.out.format("%6s %12s %10s %14s %12s %n", "vuosi", "maksuerä", "korko", "lyhennys", "lainamäärä");
for ( i=1; i < 70; i++){
System.out.println("-");
}

System.out.println(" ");

while (vuosi < lainavuodet){
vuosi = vuosi + 1;
System.out.format("%6d", vuosi);

while xxxx //miten tämä pitäisi tehdä ??
korko = (lainamaara * korkopros * 180) / (100 * 360);
maksuera = lyhennys + korko;
lainamaara = lainamaara - lyhennys;
lyhennysyht = lyhennysyht + lyhennys;
korkoyht = korkoyht + korko;
maksuerayht = maksuerayht + maksuera;



System.out.format("%12.2f ", maksuera);
System.out.format("%12.2f ", korko);
System.out.format("%12.2f ", lyhennys);
System.out.format("%12.2f %n", lainamaara);



}
System.out.println("-----------------------------------------------------------");

System.out.format("%6s", "Yht");
System.out.format("%12.2f ", maksuerayht);
System.out.format("%12.2f ", korkoyht);
System.out.format("%12.2f %n ", lyhennysyht);
Grez 18:54 9.11.09 
Kooditagit on kivat..


Java
while xxxx //miten tämä pitäisi tehdä ??
 
Siinä pitäisi varmaan olla jotain tyyliin:

Java
while (lainamaara>0) {
tikanmaa 19:09 9.11.09 
Heh, kiitos... Löydätkö jotain muuta korjattavaa ? Mites tuon voisi tehdä.." Lisäksi pitäisi ohjelmaa muokata niin että siihen voitaisiin syöttää montako kertaa vuodessa lyhennys maksetaan ja ohjelma laskisi automaattisesti lyhennykset lyhennyskertojen mukaan oikein"

Grez 19:15 9.11.09 
Mikäs siinä tuottaa ongelmaa? Mielestäni pitäisi olla aika triviaalia.

Koulutehtävissä yleensä on tarkoituksena että oppisi jotain, josta syystä en laita valmista koodia tähän. Mutta kerro mikä kohta tuottaa ongelmaa, niin autetaan tarpeen mukaan.
tikanmaa 19:20 9.11.09 
Siinähän se ongelma onkin kun mulla ei enää sytytä mitään.. Olen miettinyt sitä jo aika kauan ja olen ihan seinää vasten. Tarvitsisi jotain millä pääsisi ees alkuun.. Ja vaikea sitä on oppia kun ei ole mistä ottaa kiinni :)
tikanmaa 19:27 9.11.09 
Laitoin float lyhennyskerrat ja sitten tein kyssärin System.out.println("Montako kertaa vuodessa maksat lyhennyksiä?"); lyhennyskerrat = nappaimisto.nextFloat(); Sitten pitäisi varmaan miettiä mihin sijoittaa jonkinlainen laskutoimitus jotta ohjelma tämän ymmärtäisi. Siinä voisit hieman jeesata
editoitu: 19:38 9.11.09
Grez 19:36 9.11.09 
No sullahan on tuolla muutamia kohtia


Java
lyhennys = lainamaara / lainavuodet / 2
Tuossa on laskettu lyhennys sillä oletuksella, että lyhennyksiä tehdää 2 kertaa vuodessa.


Java
korko = (lainamaara * korkopros * 180) / (100 * 360);
Tuossa on laskettu korko sillä oletuksella, että korko lasketaan 180 / 360 = 1/2 vuodelta.

Ilmeisesti olet saanut tuon koodin valmiina ja muutokset pitäisi tehdä itse. Suosittelen, että käyt tuon koodin läpi ihan rivi kerrallaan ja mietit jokaisen rivin kohdalla, mitä siinä tapahtuu ja miksi niin tehdään.
tikanmaa 19:45 9.11.09 
kyllä tuo koodi on itse kirjoitettu joka rivi.. Tehtävässä piti tosiaan alunperin kaksi kertaa vuodessa oletuksena lyhentää lainaa tuo ensimmäinen viittaus tukee sen toimimista. En vain tiedä miten se pitäisi muttaa jos käyttäjä saa valita maksaako se 1 kerran vuodessa vai 12 kertaa vuodessa lyhennystä.
Grez 19:49 9.11.09 
No periaatteessahan voisit sitten kirjoittaa kokonaan uuden ohjelman noilla uusilla vaatimuksilla.

Mutta joka tapauksessa, minusta lähinnä pitäisi laittaa vakioiden tilalle muuttujat, jotka voisivat saada muitakin arvoja kuin 2.
tikanmaa 20:20 9.11.09 
En mä taida koko ohjelmaa sen takia tehdä uusiksi..:) Noh, yritän jotain keksiä kun en oikein ymmärrä millainen se muuttujan pitäisi olla ja millainen koodinpätköä siitä tulisi jotta se toimisi..
editoitu: 20:22 9.11.09
Grez 20:22 9.11.09 
No sullahan on tuolla ohjelmassa jo nyt joukko muuttujia:

Java
int vuosi;
int lyhennys;
int lainamaara;
float lainavuodet;
float maksuera;
float korko;
float korkopros;
float korkoyht;
float lyhennysyht;
float maksettavayht;

En oikein ymmärrä miten olet pystynyt tuollaiset tekemään, mutta "lyhennyksienmäärävuodessa" muuttujan tekeminen ei onnistu.
tikanmaa 20:29 9.11.09 
Tietenkin onnistuu, mutta sen muuttujan koodin kirjoittaminen on eri asia... Mahtaisiko tuollainen toimia ?



int vuosi;
int lyhennys;
int lainamaara;
float lainavuodet;
float maksuera;
float korko;
float korkopros;
float korkoyht;
float lyhennysyht;
float maksettavayht;
int lyhennyskerrat;
Scanner nappaimisto;

korkoyht=0;
lyhennysyht=0;
maksettavayht=0;
vuosi=0;

Locale.setDefault(Locale.ENGLISH);
nappaimisto = new Scanner(System.in);

System.out.println("Asuntolainalaskuri");

System.out.println("Anna lainamäärä?");
lainamaara = nappaimisto.nextInt();

System.out.println("Montako kertaa vuodessa maksat lyhennyksiä?");
lyhennyskerrat = nappaimisto.nextInt();

System.out.println("Anna laina-aika?");
lainavuodet = nappaimisto.nextFloat();

System.out.println("Anna vuotuinen korko?");
korko = nappaimisto.nextFloat();



if lyhennyskerrat (>=1 && lyhennyskerrat <=12) {

lyhennys = lyhennyskerrat;
}
else {

lyhennys = 0;
}
Grez 20:41 9.11.09 
Täytyy sanoa, että en ihan ymmärrä mistä tuo "lyhennys = lyhennyskerrat" tulee.

Jos katsot alkuperäistä koodiasi tai siitä ottamiani poimintoja 19:36, niin vertaa tuota siihen, miten aikaisemmin laskit lyhennyksen.
tikanmaa 20:47 9.11.09 
if (lainavuosi > 0){
lyhennys = lainamaara / lainavuosi / lyhennyskerrat;
}
else{
lyhennys = 0;

Olet oikeassa, yritin kikkailla jotain vaikeampaa kuin se todellisuudessa onkaan. Tällä koodilla se varmasti toimii kuten pitääkin.



tikanmaa 14:37 10.11.09 
Voisiko joku kertoa mikä tässä mättää, ohjelma ei toimi enkä keksi missä voisi olla vika...

public static void main(String[] args) {

int vuosi;
int lyhennys;
int lainamaara;
float lainavuodet;
float maksuera;
float korko;
float korkopros;
float korkoyht;
float lyhennysyht;
float maksettavayht;
float lyhennyskerrat;
Scanner nappaimisto;

korkoyht=0;
lyhennysyht=0;
maksettavayht=0;
vuosi=0;

Locale.setDefault(Locale.ENGLISH);
nappaimisto = new Scanner(System.in);

System.out.println("Asuntolainalaskuri");

System.out.println("Anna lainamäärä?");
lainamaara = nappaimisto.nextInt();

System.out.println("Montako kertaa vuodessa maksat lyhennyksiä?");
lyhennyskerrat = nappaimisto.nextFloat();

System.out.println("Anna laina-aika?");
lainavuodet = nappaimisto.nextFloat();

System.out.println("Anna vuotuinen korko?");
korko = nappaimisto.nextFloat();



if (lainavuodet > 0){
lyhennys = lainamaara / lainavuodet / lyhennyskerrat;
}
else{
lyhennys = 0;
}



System.out.print("");
System.out.print("");
System.out.format("%6s %12s %10s %14s %12s %n", "vuosi", "maksuerä", "korko", "lyhennys", "lainamäärä");
System.out.print ("----------------------------------------------------------------------------------");

while (vuosi < lainavuodet){
vuosi = vuosi + 1;
System.out.format("%6d", vuosi);

while (lainamaara >0){

korko = (lainamaara * korkopros * 180) / (100 * 360);
maksuera = lyhennys + korko;
lainamaara = lainamaara - lyhennys;
lyhennysyht = lyhennysyht + lyhennys;
korkoyht = korkoyht + korko;
maksettavayht = maksettavayht + maksuera;



System.out.format("%12.2f ", maksuera);
System.out.format("%12.2f ", korko);
System.out.format("%12.2f ", lyhennys);
System.out.format("%12.2f %n", lainamaara);
}


}
System.out.println("-----------------------------------------------------------");

System.out.format("%6s", "Yht");
System.out.format("%12.2f ", maksettavayht);
System.out.format("%12.2f ", korkoyht);
System.out.format("%12.2f %n ", lyhennysyht);

System.out.println("-----------------------------------------------------------");
System.out.println("-----------------------------------------------------------");



}
}
Esko 14:44 10.11.09 
Täytyypä vain huomauttaa, että aika vahvasti vaikuttaisi olevan Haaga-Helian ohjelmointialkeiskurssin tehtävä tämä. :) Siinä ei tietenkään ole mitään väärää että kysyt, hymyilyttää vain tällaiset puolivahinkona muodostuvat deja vut aina välillä.
tikanmaa 14:51 10.11.09 
Esko: Ei se kyllä itseasiassa ole.. Tai saattaa ollakin. Varmaan hyvin monissa kouluissa käytetty. Turun Amk:n tehtävä on ja tuohon asti olen päässyt mutta en saa ohjelmaa toimimaan.
editoitu: 15:37 10.11.09
Grez 15:36 10.11.09 
Voisit kyllä ihan oikeasti käyttää niitä kooditageja, en nyt huvin vuoksi niistä huomauttanut. Helpottavat lukemista huomattavasti ja sitä kautta vastauksiakin tulee todennäköisemmin ja/tai nopeammin.

Eli [ code=java ] koodi väliin [ / code ] (ja ilman välilyöntejä siis..)


Sanoisin, että tuossa kannattaisi while asemesta käyttää ihan kahta sisäkkäistä for:ia, ulommassa vuodet ja sisemmässä vuosittaiset maksukerrat.


Sitten toinen juttu, käyttäjältä kysytään korko (oletettavasti korko%) mutta sitä ei käytetä missään. Laskennassa käytetään muuttujaa korkopros, jota ei alusteta missään.
tikanmaa 15:49 10.11.09 
Joo, en taas huomioinut tuota selkeyttä koodissa.. Totta, en huomannut tuota korko asiaa, se on nyt korjattu. Menisikö tuo ulompi for jotenkin näin:

for (vuosi =1; vuosi<lainavuodet;vuosi++) {
System.out.format("%6d", vuosi);

}
editoitu: 16:00 10.11.09
Grez 15:59 10.11.09 
Näyttää ihan hyvältä, paitsi että pitäisi varmaan olla vuosi<=lainavuodet

Toisaalta tarvitseeko tuollaista kysyä? Nopeamminhan kokeilet itse kun postaat sen tänne...
seuraava sivu »