Permalänk

programmering a java igen

tjoo sitter här och skriver lite, vad jag gör är ett program som räknar upp 20 tecken i Unicode och sen frågar användaren fall den ska räkna upp 20 till, då man gör valet 'j' och sen ska den sluta om man gör valet 'n' men när jag gör valet 'n' så får jag en uträkning till innan programmet avslutas. men kan inte komma på varför? någon som är duktig och vill ge mig lite tips? har det med att göra att for-sasten ligger efter while?

här är koden som ja lyckats få ihop iallafall

//Unicode public class Uppgift76{ public static void main(String[] args){ int start = 97; //motsvarar bokstaven 'a' int antal = 20; //ger 5 tecken char svar = 'j'; for(int n = start; n < start+antal; n++){ System.out.println(n + "\t" + (char)n); } while (svar == 'j' || svar == 'j'){ System.out.print("En beräkning till? "); svar = Keyboard.readChar(); start = start + antal; for(int n = start; n < start+antal; n++){ System.out.println(n + "\t" + (char)n); } } } }

Permalänk
Medlem

Först skriver du ut 20. Sen kollar du om svaret är "j", vilket det är initierat till. Sen frågar du om användaren vill ha 20 till. Sen skriver du ut 20 till. /Sen/ kollar du det svar du faktiskt inhämtat.

Fråga först, kolla svaret sen, så funkar det bättre!

Permalänk

Jo men det ska ge en utmatning direkt när man kör det, sen efter det gett en ska det fråga fall man vill ha en till eller avsluta där.
men om man väljer 'n' så vill jag ju bara att programmet avslutas, men istället ger det en uträkning till och sen slutar det.
men jag hänger inte med på varför det gör så?

Permalänk
Medlem

Det du kan göra är att fråga innan while-loop, och sedan fråga i slutet av den. Det enda "problem" är att du då i koden frågar samma sak två gånger, när de skulle kunna ligga i samma while-loop.

Ett alternativ är att göra while-loopen på följande sätt:

while(true){ System.out.print("En beräkning till? "); svar = Keyboard.readChar(); if(svar != 'j' || svar !='J') break; //kod här... }

Ett problem med att använda break är att loopar kan bli väldigt svårlästa om man har många villkor, men i det här fallet skulle jag tycka att det är ok. while(true) betyder att loopen körs i en evighet, ända tills man använder break för att avbryta den(eller stänger programmet).

Dold text

Tankevurpa deluxe, ignorera.

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk

aaaa står inget alls om while(true) i boken så där lär man sig något nytt

men jag vill bara få den till att sluta om jag väljer 'n' väljer jag 'j' ska den loopa och ge mig möjlighet att välja (j/n) efter 20 tecken igen

Permalänk
Medlem
Skrivet av Niklas807:

Jo men det ska ge en utmatning direkt när man kör det, sen efter det gett en ska det fråga fall man vill ha en till eller avsluta där.
men om man väljer 'n' så vill jag ju bara att programmet avslutas, men istället ger det en uträkning till och sen slutar det.
men jag hänger inte med på varför det gör så?

Läs din kod uppifrån och ner. Detta sker nu:

1. Sätt svar till 'j';
2. Kontrollera om svar är 'j';
3. Fråga om användaren vill fortsätta;
4. Gör en uträkning;
5. Gå till 2

Så oavsett vad användaren svarar första gången kommer minst en uträkning göras efteråt.

Jag kan inte rekommendera att göra som Toja92 föreslår, det gör bara koden svårare att läsa.

tips: Genom att ta bort din första for-loop och ändra ordningen på det som händer i while-loopen kan du få precis det beteende du vill ha.

Visa signatur

Kom-pa-TI-bilitet

Permalänk

men när jag ändrar:

char svar = j; till char svar;

Så bbara fortsätter den att räkna upp tecken och slutar aldrig, jag får verkligen inte ihop detta alls känns det som.

Permalänk

jag är med på vad du menar där Teknocide, att om jag ändrar om ordningen, så kommer den inte göra den uträkningen jag vill bli av med, men så fort jag börjar ändra ed när den ska fråga efter j eller n så buggar det typ och bara forsätter räkna upp när man trycker ja, så man får stänga cmd o starta om den.

Permalänk
Medlem
Skrivet av Niklas807:

jag är med på vad du menar där Teknocide, att om jag ändrar om ordningen, så kommer den inte göra den uträkningen jag vill bli av med, men så fort jag börjar ändra ed när den ska fråga efter j eller n så buggar det typ och bara forsätter räkna upp när man trycker ja, så man får stänga cmd o starta om den.

Kan du visa hur din kod ser ut nu?

Visa signatur

Kom-pa-TI-bilitet

Permalänk

//Unicode public class Uppgift76{ public static void main(String[] args){ int start = 97; //motsvarar bokstaven 'a' int antal = 20; //ger 5 tecken char svar; // for(int n = start; n < start+antal; n++){ // System.out.println(n + "\t" + (char)n); // } System.out.print("En beräkning till? "); svar = Keyboard.readChar(); while (svar == 'j' || svar == 'j'){ // System.out.print("En beräkning till? "); // svar = Keyboard.readChar(); start = start + antal; for(int n = start; n < start+antal; n++){ System.out.println(n + "\t" + (char)n); } } } }

Så ser den ut jusst nu, har inte arbetat vidare med den så mycket mer.blev så frustrerad på o sitta o stirra mig blind. så tog en paus.

men som den ser ut nu så ställer den ju frågan först innan den gör en ut läsning, sen när man väljer 'j' så buggar det

Permalänk
Medlem
Skrivet av Niklas807:

//Unicode public class Uppgift76{ public static void main(String[] args){ int start = 97; //motsvarar bokstaven 'a' int antal = 20; //ger 5 tecken char svar; // for(int n = start; n < start+antal; n++){ // System.out.println(n + "\t" + (char)n); // } System.out.print("En beräkning till? "); svar = Keyboard.readChar(); while (svar == 'j' || svar == 'j'){ // System.out.print("En beräkning till? "); // svar = Keyboard.readChar(); start = start + antal; for(int n = start; n < start+antal; n++){ System.out.println(n + "\t" + (char)n); } } } }

Så ser den ut jusst nu, har inte arbetat vidare med den så mycket mer.blev så frustrerad på o sitta o stirra mig blind. så tog en paus.

men som den ser ut nu så ställer den ju frågan först innan den gör en ut läsning, sen när man väljer 'j' så buggar det

Frågan ställs fortfarande innan uträkningen görs, och utanför loopen dessutom. När programmet har börjat snurra så kommer det fortsätta eftersom det aldrig ges en ny fråga.

Du har nu:

1. Fråga om användaren vill göra en beräkning till
2. Om svaret på frågan är 'j' eller 'j' (du vill antagligen ha stora 'J' i ena fallet) så går vi in i loopen, annars händer ingenting
3. Gör en beräkning
4. Gå till 2

Vad du vill ha:

1. Sätt svar till 'j' för att garantera åtminstone ett varv i loopen
2. Loopa om svar == 'j'
3. Gör en beräkning
4. Fråga användaren om han vill göra en beräkning till
5. Gå till 2

Visa signatur

Kom-pa-TI-bilitet

Permalänk

do{
// gör uträkning
// fråga om anv vill köra igen
// inmatning från anv (svar)
}
while (svar == 'j')

Visa signatur

Nikon D90, Nikon D7000, SB-600, 2xYN-460, Nikkor 18-105mm/3.5-5.6 VR, Nikkor 35mm/1.8, Nikkor 50mm/1.8D, Tamron 70-200/2.8, Tokina 11-16/2.8, Nikon 85/3.5 Macro
Flickr

Permalänk

Tusen tack!!!!!!! verkligen! trodde jag skulle slita av mitt hår här.

Men här komemr färdigt resultat iallafall

//Unicode public class Uppgift76{ public static void main(String[] args){ int start = 97; int antal = 20; char svar = 'j'; do{ for(int n = start; n < start+antal; n++){ System.out.println(n + "\t" + (char)n); } System.out.print("En beräkning till? "); svar = Keyboard.readChar(); start = start + antal; } while (svar == 'j' || svar == 'j');{ } } }

Tusen tack för all hjälp!