Permalänk
Medlem

Hjälp jag har kört fast ;)

Hejsan,

programmet fungerar bra förutom när jag väljer att rita ut raketen i fler än ett steg. Jag förstår inte var det blir fel och varför. Tacksam för lite hjälp från er programmeringsproffs

import java.util.*; public class Raket { public static void main(String[] args) { // Huvudmetoden. String draw_boy; String draw_girl; String draw_rocket; Scanner sc = new Scanner(System.in); do { String svar; System.out.print("Ange vad du vill rita. Skriv P för pojke, F för flicka," + "eller R för raket."); svar = sc.next(); if ("P".equalsIgnoreCase(svar)){ draw_boy(); // Om P väljes, rita pojke. Annars någon av else if satserna nedan. } else if ("F".equalsIgnoreCase(svar)){ draw_girl(); // Om F väljes. } else if ("R".equalsIgnoreCase(svar)){ System.out.print("Hur många steg ska raketen ha? "); int antalSteg = 0; antalSteg = sc.nextInt(); draw_rocket(); // Om R väljes. } System.out.print("Vill du fortsätta? Tryck J för ja & N för nej."); } while ("J".equalsIgnoreCase(sc.next())); } public static void draw_boy() { // Om P väljes. draw_head(); draw_base(); draw_parallel(); draw_base(); draw_cone(); } public static void draw_girl() { // Om F väljes. draw_head(); draw_cone(); draw_base(); draw_cone(); } public static void draw_rocket() { // Om R väljes. int antalSteg =0; draw_cone(); for ( int i=1; i<antalSteg; i++ ) draw_base(); draw_parallel(); { draw_base(); draw_cone(); } } public static void draw_head() { System.out.println(" //\\"); System.out.println(" |o,o|"); System.out.println(" \\v/"); } public static void draw_cone() { System.out.println(" /\\"); System.out.println(" / \\ "); System.out.println(" / \\ "); } public static void draw_parallel() { System.out.println("| |"); System.out.println("| |"); System.out.println("| |"); } public static void draw_base() { System.out.println("========"); } }

Permalänk
Medlem

if ("R".equalsIgnoreCase(svar)){
System.out.print("Hur många steg ska raketen ha? ");
int antalSteg = 0;
antalSteg = sc.nextInt();
draw_rocket(); // Om R väljes.
}

den primitva variablen antalSteg som får ett värde har endast det värde inom det området, och eftersom du inte skickar med det värdet till draw_rocket(); så kommer inte metoden få värdet som du vill använda. ändra till :
antalSteg = sc.nextInt();
draw_rocket(antalSteg); // Om R väljes.
samt
public static void draw_rocket(int antalSteg) { // Om R väljes.
draw_cone();
for ( int i=1; i<antalSteg; i++ )

då borde det funka, din loop bör även börja på i=0, lr att du har villkoret i<=antalSteg, annars blire en iteration för lite.
Try it?:P
Lycka till

Edit: Kollade lite mer i efterhand, tror du har placerat dina måsvingar lite fel vid for-loopen!:P de ska börja direkt efter "i++) {" och innefatta allt som skall repeteras "}" Utöver att skicka antalSteg som parameter så kan du deklarera den som en klassvariabel, dock skulle jag inte rekommendera det, parameter passar bäst i detta fallet. Sen de 3 stringsen som är deklarerade i början, de används inte?;o Men du kan ska ha dem sen iof^^

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 så mycket för hjälpen! Ska kolla detta ikväll och se om det fungerar

Permalänk
Avstängd

Hoppas det är ok att låna tråden lite?:) Annars kan moderator ta bort inlägget om TS skulle misstycka.^^ Inte meningen och vara oförskämd eller liknande, men jag som inte programmerar undrar: Hur kan folk köra fast i programmering?:O Jag menar det är väl bara att följa manualen (det man lärt sig + eventuell manual) och göra som där står?:) Inte meningen att låta provocerande utan blott en fråga rakt upp och ner för en icke insatt nyfiken medborgare!:) Ställer frågan här då jag tyckte det var onödigt att skapa en ny tråd!

Visa signatur

Here at Sweclockers we are all colleagues with each other! Those of us who just love Apple, we go beyond the: "We are all colleagues with each other"-talk! We ARE The iFamily!(F) Because we iTalk Apple! Simple as that! I am a proud member of The iFamily!<3
R.I.P. Steve Jobs!<3 See you in the iCloud!(F) I feel iSad...:'(
iFamily Sweden!

Permalänk
Medlem

Programmering bygger på att man kan konstruera logiska regler så att man får ett önskat slutresultat och detta är svårt, särskilt i början. Lite som att fastna i sudoku om du provat det nån gång - även om man kan de logiska relgerna är det inte så lätt alltid, men ju mer man övar destå lättare blir det att komma förbi dessa problem.

Visa signatur

www.filipsprogram.tk - lite freeware
"Delight, herregud. Talang är bara förnamnet."

Permalänk
Hedersmedlem

Det finns vissa mönster man kan följa i programmering men det är samtidigt väldigt öppet och man kan vara väldigt kreativ. Bara för att man kan reglerna så går det inte alltid som man vill. Det kan också vara så att det blir mycket att hålla koll på. Blir det fel i koden så är det svårt att säga var felet är. Har man tänkt fel så gäller det att hitta ett logiskt fel istället för ett kodfel som kompilatorn annars skulle flagga. Det kan bli ganska komplicerat iaf.

Permalänk
Avstängd
Skrivet av Delight:

Programmering bygger på att man kan konstruera logiska regler så att man får ett önskat slutresultat och detta är svårt, särskilt i början. Lite som att fastna i sudoku om du provat det nån gång - även om man kan de logiska relgerna är det inte så lätt alltid, men ju mer man övar destå lättare blir det att komma förbi dessa problem.

Graciasss!:D Bra förklaring som jag köper till 100%:)

Visa signatur

Here at Sweclockers we are all colleagues with each other! Those of us who just love Apple, we go beyond the: "We are all colleagues with each other"-talk! We ARE The iFamily!(F) Because we iTalk Apple! Simple as that! I am a proud member of The iFamily!<3
R.I.P. Steve Jobs!<3 See you in the iCloud!(F) I feel iSad...:'(
iFamily Sweden!

Permalänk
Medlem

Du måste även tänka på alla möjliga(och omöjliga) saker som kan hända när ditt program körs av någon som inte är insatt i hur den bakomliggande koden är uppbyggd eller ens bryr sig om vad som händer när man gör vissa saker.
Som till exempel i programmet ovan, om man matar in något annat än P, F, R eller J/N så kommer programmet krascha och ge ett felmeddelande(RuntimeException eller liknande), och sådana saker bryr sig(oftast) inte användaren om.
Så precis som föregående säger så gäller det att konstruera logiska regler och man måste testa alla möjligheter(om man inte har en egen test avdelning eller liknande).

Visa signatur

"This is VAR, spelled A-U-T-O"

Permalänk
Medlem

Följa manualen, haha den va bra Eftersom du inte har en aning om vad programmering är så är det väl ok att tro sånt. ^^ Som de andra skriver så kan man nog säga att det är totala motsatsen, de "manualer" som finns beskriver just hur du kan använda språket och hur syntaxen skall se ut, sen finns det regler som man bör följa vad gäller design och struktur på både kod och programmets uppdelning. Allt handlar i slutänden att om att lösa stora och små(del)problem, där varje problem i princip kan lösas på oändligt många olika sätt. Som Kreppe också nämner så är felhantering en stor del, där det i stort sätt handlar om att dra en gräns på hur mycket felhantering man vill implementera, då man aldrig kan hantera alla fel som kan uppstå.

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
Skrivet av MacEnkronan:

Jag menar det är väl bara att följa manualen (det man lärt sig + eventuell manual) och göra som där står?:)

"Hur kan man fastna med skrivandet till sin roman, det är ju bara använda alfabetet och svenska språket man lärt sig eller kolla en ordbok?"

ungefär så kände jag när jag läste inlägget.

Permalänk
Avstängd
Skrivet av Cloudburst:

"Hur kan man fastna med skrivandet till sin roman, det är ju bara använda alfabetet och svenska språket man lärt sig eller kolla en ordbok?"

ungefär så kände jag när jag läste inlägget.

Jag försökte vara ödmjuk i inlägget då jag misstänkte jag skulle få liknande kommentarer.:P Inte lätt och vara ett oinitierat Mynt i dessa frågor vilket jag är.:) Alla är vi nybörjare!^^ Och jag noterar att det beklagligtvis finns en attityd här på Swec. att vara direkt eller indirekt taskig bara för att man är nybörjare.:P

Visa signatur

Here at Sweclockers we are all colleagues with each other! Those of us who just love Apple, we go beyond the: "We are all colleagues with each other"-talk! We ARE The iFamily!(F) Because we iTalk Apple! Simple as that! I am a proud member of The iFamily!<3
R.I.P. Steve Jobs!<3 See you in the iCloud!(F) I feel iSad...:'(
iFamily Sweden!

Permalänk
Medlem
Skrivet av Gnejs:

if ("R".equalsIgnoreCase(svar)){
System.out.print("Hur många steg ska raketen ha? ");
int antalSteg = 0;
antalSteg = sc.nextInt();
draw_rocket(); // Om R väljes.
}

den primitva variablen antalSteg som får ett värde har endast det värde inom det området, och eftersom du inte skickar med det värdet till draw_rocket(); så kommer inte metoden få värdet som du vill använda. ändra till :
antalSteg = sc.nextInt();
draw_rocket(antalSteg); // Om R väljes.
samt
public static void draw_rocket(int antalSteg) { // Om R väljes.
draw_cone();
for ( int i=1; i<antalSteg; i++ )

då borde det funka, din loop bör även börja på i=0, lr att du har villkoret i<=antalSteg, annars blire en iteration för lite.
Try it?:P
Lycka till

Edit: Kollade lite mer i efterhand, tror du har placerat dina måsvingar lite fel vid for-loopen!:P de ska börja direkt efter "i++) {" och innefatta allt som skall repeteras "}" Utöver att skicka antalSteg som parameter så kan du deklarera den som en klassvariabel, dock skulle jag inte rekommendera det, parameter passar bäst i detta fallet. Sen de 3 stringsen som är deklarerade i början, de används inte?;o Men du kan ska ha dem sen iof^^

Tack så mycket för din hjälp, har lärt mig massor. Förstår nu varför det blev som det blev
Det fungerar strålande förutom lite finslipande. Det är inte det allra lättaste att programmera och sedan hitta felen man gör. Ni är otroligt duktiga ni som finns här.

Tack, Tack!

Permalänk
Medlem

Bara kul att hjälpa till! Lycka till i framtiden och tveka inte på att fråga här igen nästa gång om du skulle köra fast!:P

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 |