Java kod vill inte som jag vill. Hjälp!

Permalänk
Medlem

Java kod vill inte som jag vill. Hjälp!

God förmiddag mina tappra sweklockers. Nu är det så att jag är och kodar igen och det verkar som att jag gjort något galet, men har nog suttit lite för länge framför koden och blivit blind på vad jag har gjort för fel. Det är så att outputen vägrar skriva ut allt som jag vill att den ska skriva ut. Se själva!

public class kod {
public void balance(double kapital, double räntesats, double tid){

double Ränta, KapitalJan, KapitalDec;

System.out.printf( "%s%7.2s\n", "År", "Kapital(jan)", "Ränta", "Kapital(dec");

for(int i = 1; i<=tid; i++){

Ränta = kapital * räntesats;
KapitalJan = kapital * Math.pow ( 1.0+ räntesats, i-1);
KapitalDec = KapitalJan + Ränta;

String str = String.format( "%2d%12.2f", i, KapitalJan, Ränta, KapitalDec);

System.out.println( str );
}
}

public static void main (String [] args){

kod prog = new kod();
prog.balance(1000, 0.04, 7);
}
}
När jag kör programmet ser jag bara "År och Kap" och samma gäller svaren...

Snälla hjälp en programmerare i nöd!
Mvh Emile

Permalänk

Din formatsträng är fel. Läs dokumentationen, finns lite här: http://download.oracle.com/javase/1.5.0/docs/api/java/util/Fo...

Visa signatur

PC Kontoret: Ryzen 5700X, 32GB, 6800 XT
PC Spelrum: Ryzen 5800X, 32GB, 7900 XT

Permalänk
Medlem

E inte kodare men det här ser inkonsistent ut
System.out.printf( "%s%7.2s\n", "År", "Kapital(jan)", "Ränta", "Kapital(dec");

Sitter citationstecknet i sista pararentesen rätt?
Fungerar det verklighen med åäö i koden? testa utan?

Permalänk
Medlem

Ändra dessa två strängar till ungefär detta:

//System.out.printf( "%s%7.2s\n", "År", "Kapital(jan)", "Ränta", "Kapital(dec");
System.out.printf( "%s%17s%7s\n", "År", "Kapital(jan)", "Ränta", "Kapital(dec");

//String str = String.format( "%2d%12.2f", i, KapitalJan, Ränta, KapitalDec);
String str = String.format( "%2d%12.2f%12.2f", i, KapitalJan, Ränta, KapitalDec);

Så bör det fungera.

Visa signatur

"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." - Brian W. Kernighan

Permalänk
Medlem
Skrivet av anders_w:

Fungerar det verklighen med åäö i koden? testa utan?

Jag har för mig att det funkar utmärkt i java. Ser sjukt fult ut dock.

Personligen är jag emot variabler med svenska namn över huvud taget. Är bara jobbigt att läsa när syntax och inbyggda metoder är på engelska + att engelskspråkiga kollegor har lika svårt att sätta sig in i koden som om alla variabler skulle heta något i stil med "blaj" och "fhssakhd". Även om man nu inte har engelskspråkiga kollegor så är det bra att ha som vana att skriva kod som är lätt att förstå för alla.

Men nu blev det visst lite of topic igen. Jag har en förmåga att hamna där :/

Visa signatur

He who hasn't hacked assembly language as a youth has no heart. He who does so as an adult has no brain.
~John Moore

Permalänk
Medlem

Som Anaii säger är det väldigt rekommenderat att använda engelska, speciellt i koden, kommentarer kan ju vara okej att ha på svenska även om jag själv föredrar att man är konsekvent i både kod och kommentarer.

När det kommer till själva problemet så först en fråga från mig, varför använda formatering som den där när innehållet är statiskt i detta fallet, storleken på strängarna kommer ju alltid vara desamma då du inte manipulerar dem? (Den första printen)
Skulle räcka med en syso som denna :

System.out.println("År Kapital(jan) Ränta Kapital(dec)");

Om nu vill lösa printarna med format så är problemet att du inte har lika många platser för indata som indata du skickar med.
Du skickar med fyra strängar i

System.out.printf( "%s%7.2s\n", "År", "Kapital(jan)", "Ränta", "Kapital(dec");

Vilket betyder att du skall ha fyra stycken %[x.x]s i formateringen för att visa samtliga.
En korrekt version skulle vara

System.out.printf("%s%17s%7s%15s\n", "År", "Kapital(jan)", "Ränta", "Kapital(dec)");

Desamma gäller även i loopen där du använder

String str = String.format( "%2d%12.2f", i, KapitalJan, Ränta, KapitalDec);

Endast två stycken formateringar, men fyra värden.
Korrekt version skulle vara t.ex.

String str = String.format("%2d%12.2f%12.2f%10.2f", i, KapitalJan, Ränta, KapitalDec);

Hoppa du förstod, försöka skriva om det till engelska, samt ändra namn på klassen från "kod", gör mig väldigt ledsen(!) att se en klass heta så
Lycka till!:)

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem

Tack alla för hjälpen! Blir lätt att man blir kodblind när man suttit ett tag och stirrat in i skärmen! Med er hjälp funkade det utan några problem!

@ Gnejs

Klassen heter egentligen inte kod, bytte ut klassen när jag länkade här på sweklockers! Hoppas inte du är allt för besviken!

Permalänk
Medlem

Du är välkommen!

Okej, bra att veta så man kan sova lugnt inatt!

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem
Skrivet av Gnejs:

Du är välkommen!

Okej, bra att veta så man kan sova lugnt inatt!

Haha, se till att sova riktigt gott! Tack ännu en gång!