Permalänk

Java kod problem

(OBS löst!!)

Hejsan!
Har ett problem med ett stycke Javakod. Jag är en (extrem) nybörjare, så kom gärna med tips!

KOD:

public class name{ public static void main(String[] args) { System.out.println("hur mår du?") ; String mår = Keyboard.readString(); System.out.println("Rätt åt dig!") ; System.out.println("Är du glad?"); String humör = Keyboard.readString(); if (humör == "Ja") { System.out.println("Vad bra!") ; }if(humör == "Nej") { System.out.println("vad dåligt!") ; } } }

Bild: http://manasiev.com/pix/?v=namnlsiki.png

Så det jag vill är att man ska få olika text Beroende på hur man svarar på frågan "Är du glad?". men när man får upp frågan och skriver "Ja" eller "Nej" så får man inget svar tillbaka, och jag undrar vad jag har gjort för fel! hoppas ni förstår vad jag menar, det vart lite luddigt..

Permalänk
Hedersmedlem

Jag redigerade ditt inlägg och la till code-taggar så koden blir mer lättläst.

MVH
Moderator Shimonu

Permalänk
Avstängd

Jag kodar inget men en snabb googling på strcmp för java gav:

s.equals

Som i:

if(humor.equals("Ja")) {}

Sedan tycker jag att switch är elegantare än if i ett sådant där fall, jag tror du förstår hur det fungerar om du kollar här:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/swit...

Permalänk
Inaktiv

Jag vet inte vad ett keyboard är men jag hade gjort såhär

public class name{ public static void main(String[] args) { Scanner scan = new Scanner(System.in) System.out.println("Är du glad?"); String read = scan.nextLine(); if (read.equals("Ja") { // == fungerar bara på primitiver System.out.println("Vad bra!") ; } if (read.equals("Nej") { System.out.println("vad dåligt!") ; } else { System.out.println("vad menar du?") ; } } }

Permalänk
Skrivet av VeryMadMeatball:

Hejsan!
Har ett problem med ett stycke Javakod. Jag är en (extrem) nybörjare, så kom gärna med tips!

KOD:

public class name{ public static void main(String[] args) { System.out.println("hur mår du?") ; String mår = Keyboard.readString(); System.out.println("Rätt åt dig!") ; System.out.println("Är du glad?"); String humör = Keyboard.readString(); if (humör == "Ja") { System.out.println("Vad bra!") ; }if(humör == "Nej") { System.out.println("vad dåligt!") ; } } }

Bild: http://manasiev.com/pix/?v=namnlsiki.png

Så det jag vill är att man ska få olika text Beroende på hur man svarar på frågan "Är du glad?". men när man får upp frågan och skriver "Ja" eller "Nej" så får man inget svar tillbaka, och jag undrar vad jag har gjort för fel! hoppas ni förstår vad jag menar, det vart lite luddigt..

testa med humör.compareTo("Ja") eller humör.compareToIgnoreCase("Ja")..EDIT: annars går humör.matches("Ja") ännu bättre då du får en boolean som resultat=)..

Visa signatur

AMD Ryzen 5 3600 | Gigabyte x570 Gaming X | 16GB 3200MHz Crucial Ballistix | Palit Geforce RTX 3070 8GB Gamingpro | Crucial BX 480GB | WD Blue 500GB | WD 5400rpm 500GB | Acer Nitro VG240YU | Tesoro Excalibur Kailh Blue | Finalmouse

Permalänk
Skrivet av Shimonu:

Jag redigerade ditt inlägg och la till code-taggar så koden blir mer lättläst.

MVH
Moderator Shimonu

Tack!

Skrivet av aliquise:

Jag kodar inget men en snabb googling på strcmp för java gav:

s.equals

Som i:

if(humor.equals("Ja")) {}

Sedan tycker jag att switch är elegantare än if i ett sådant där fall, jag tror du förstår hur det fungerar om du kollar här:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/swit...

Skrivet av anon81912:

Jag vet inte vad ett keyboard är men jag hade gjort såhär

public class name{ public static void main(String[] args) { Scanner scan = new Scanner(System.in) System.out.println("Är du glad?"); String read = scan.nextLine(); if (read.equals("Ja") { // == fungerar bara på primitiver System.out.println("Vad bra!") ; } if (read.equals("Nej") { System.out.println("vad dåligt!") ; } else { System.out.println("vad menar du?") ; } } }

Keyboard är en class som jag refferar? till för att kunna skriva och använda tangentbordet i programet, tack! ska kolla

Skrivet av whiteface:

testa med humör.compareTo("Ja") eller humör.compareToIgnoreCase("Ja")..EDIT: annars går humör.matches("Ja") ännu bättre då du får en boolean som resultat=)..

Tack alla! jag ska testa o se om det funkar

Permalänk
Medlem
Skrivet av VeryMadMeatball:

Hejsan!
Har ett problem med ett stycke Javakod. Jag är en (extrem) nybörjare, så kom gärna med tips!

KOD:

public class name{ public static void main(String[] args) { System.out.println("hur mår du?") ; String mår = Keyboard.readString(); System.out.println("Rätt åt dig!") ; System.out.println("Är du glad?"); String humör = Keyboard.readString(); if (humör == "Ja") { System.out.println("Vad bra!") ; }if(humör == "Nej") { System.out.println("vad dåligt!") ; } } }

Bild: http://manasiev.com/pix/?v=namnlsiki.png

Så det jag vill är att man ska få olika text Beroende på hur man svarar på frågan "Är du glad?". men när man får upp frågan och skriver "Ja" eller "Nej" så får man inget svar tillbaka, och jag undrar vad jag har gjort för fel! hoppas ni förstår vad jag menar, det vart lite luddigt..

Ändra till

if(humör.equals("Ja")

och den andra till

else if (humör.equals("Nej")

.

Till sist, notera att dessa if satser bara är sanna om stavningen är exakt Ja eller Nej. "nej" tex funkar inte. Du kan rätta det genom följande:

if((humör.toLowerCase()).equals("ja")

Permalänk
Avstängd

Gjorde en ny sökning:
http://docs.oracle.com/javase/tutorial/java/data/comparestrin...

Lycka till

equalsIgnoreCase är väl trevligt att använda där. Vore kanske trevligt med startsWith också men den verkar inte ha något funktionsnamn i kombination med ignoreCase. Däremot finns toLowerCase så du kan omvandla båda strängarna till små bokstäver / bara skriva "ja" med små bokstäver.

På det viset kommer den ju acceptera allt av ja, Ja, ja. Ja. ja! osv ..

Permalänk
Medlem
Skrivet av VeryMadMeatball:

Keyboard är en class som jag refferar? till för att kunna skriva och använda tangentbordet i programet, tack! ska kolla

Aldrig använt mig av Keyboard.

Testa använd Scanner istället. Deklarera den först genom följande.

Scanner scan = new Scanner(System.in);

Det program du kodar med kommer visa ett fel pga av att du inte importerat Scanner. Tryck på felet och låt den importera. (eller lägg till

import java.util.Scanner;

manuellt längst upp i din klass. Sedan läser du in en sträng genom

String humör = scan.nextLine();

Permalänk
Medlem

Kan försöka förklara varför du inte kan använda == i detta fall också. String är ett objekt och om du jämför objekt med == så är det referensen (adressen i minnet) som du kollar om den är lika, dvs om det är samma objekt på båda sidor av likhetstecknen. I ditt exempel är det två olika objekt, humör är ett och "Ja" respektive "Nej" är ett annat objekt, alltså inte lika. Om du däremot jämför primitiva datatyper, alla datatyper som börjar med liten bokstav som int, long osv, så går det bra att använda == för att jämföra dessa, då jämförs värdet och inte referensen. I andra språk, t.ex. C#, kan man använda == även för en sträng.

/Viktor

Permalänk
Medlem
Skrivet av VeryMadMeatball:

Hejsan!
Har ett problem med ett stycke Javakod. Jag är en (extrem) nybörjare, så kom gärna med tips![...]

Så det jag vill är att man ska få olika text Beroende på hur man svarar på frågan "Är du glad?". men när man får upp frågan och skriver "Ja" eller "Nej" så får man inget svar tillbaka, och jag undrar vad jag har gjort för fel! hoppas ni förstår vad jag menar, det vart lite luddigt..

Hej,

I java som är ett objektorienterat språk finns det någonting som kallas objekt. Ett objekt är en instans av en klass. Exempelvis så är din variabel "mår" en instans av klassen "String". Ett objekt har i sin tur någonting som kallas en referens vilket är en pekare på vart i arbetsminnet som detta objekt är lagrat.

När du då använder jämförelseoperatorn "==" så kollar du inte om värdet på din String är lika utan om båda strängarna refererar till samma objekt.
Därför ska du använda en metod i klassen String som heter .equals() som kollar om värdet är samma.

I ditt fall blir det alltså humör.equals("Ja");
Observera här att det bara kommer ge träffar på "Ja" och inte "ja","JA, eller "jA". Därför kan du istället använda humör.equalsIgnoreCase("Ja"); som skiter i om bokstäverna är i gemena eller versaler, bara det är samma bokstav.

***********************************************
En annan sak utöver ditt problem jag vill påpeka. Klassen Keyboard verkar inte ingå i javas standardbibliotek av klasser och du bör därför använda klassen Scanner istället som är standard om du inte har en specifik anledning att använda just klassen Keyboard.

Din kod skulle då se ut såhär:

import java.util.Scanner; //Här importeras klassen scanner så namnet "Scanner" känns igen i koden av kodprogrammet(IDE) public class Test { private static Scanner scan = new Scanner(System.in); //System.in innebär att den ska läsa ifrån det som skrivs public static void main(String[]args){ System.out.println("Är du glad?"); String mår = scan.nextLine(); System.out.println("Rätt åt dig!") ; System.out.println("Är du glad?"); String humör = scan.nextLine(); if(humör.equalsIgnoreCase("Ja")){ //Är svaret "ja" skrivs "Vad bra ut" System.out.println("Vad bra!") ; }else //else, annars om svaret är någonting annat än "ja","Ja","JA" eller "jA" så skriv "vad dåligt!" ut. System.out.println("vad dåligt!") ; } }

Visa signatur

Asus P8P67 Deluxe B3 | Intel i7-2600k@3,4GHz | 16 GB Corsair Vengeance LP 1600Mhz CL9 | Asus GTX 580 Matrix@900Mhz | Corsair Force GT 120GB | WD Caviar Black 1TB | Corsair 850 AX | Fractal Design R4 | Dell u2410 | Qpad MK-80 | QPad 5K

CITERA FÖR SVAR!

Permalänk
Medlem

Du har fått en lösning på ditt problem men jag känner att jag behöver skriva detta med.
Att använda svenska tecken i variabelnamn är att be om bekymmer. Det ska funka i moderna kompilatorer men min erfarenhet är att det funkar i 99% av fallen och det är den sista procenten som råkar vara den man använder.
Bara ett tips från någon som kodat det mesta i över 20 år.. (Ja det finns gamlingar här med)

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Skrivet av Thandol:

Ändra till

if(humör.equals("Ja")

och den andra till

else if (humör.equals("Nej")

.

Till sist, notera att dessa if satser bara är sanna om stavningen är exakt Ja eller Nej. "nej" tex funkar inte. Du kan rätta det genom följande:

if((humör.toLowerCase()).equals("ja")

Tack

Skrivet av aliquise:

Gjorde en ny sökning:
http://docs.oracle.com/javase/tutorial/java/data/comparestrin...

Lycka till

equalsIgnoreCase är väl trevligt att använda där. Vore kanske trevligt med startsWith också men den verkar inte ha något funktionsnamn i kombination med ignoreCase. Däremot finns toLowerCase så du kan omvandla båda strängarna till små bokstäver / bara skriva "ja" med små bokstäver.

På det viset kommer den ju acceptera allt av ja, Ja, ja. Ja. ja! osv ..

Jo, jag vet att stavningen måste vara rätt, Tack för länken!

Skrivet av Thandol:

Aldrig använt mig av Keyboard.

Testa använd Scanner istället. Deklarera den först genom följande.

Scanner scan = new Scanner(System.in);

Det program du kodar med kommer visa ett fel pga av att du inte importerat Scanner. Tryck på felet och låt den importera. (eller lägg till

import java.util.Scanner;

manuellt längst upp i din klass. Sedan läser du in en sträng genom

String humör = scan.nextLine();

Skrivet av vg132:

Kan försöka förklara varför du inte kan använda == i detta fall också. String är ett objekt och om du jämför objekt med == så är det referensen (adressen i minnet) som du kollar om den är lika, dvs om det är samma objekt på båda sidor av likhetstecknen. I ditt exempel är det två olika objekt, humör är ett och "Ja" respektive "Nej" är ett annat objekt, alltså inte lika. Om du däremot jämför primitiva datatyper, alla datatyper som börjar med liten bokstav som int, long osv, så går det bra att använda == för att jämföra dessa, då jämförs värdet och inte referensen. I andra språk, t.ex. C#, kan man använda == även för en sträng.

/Viktor

Aha! tack, kör på scanner isället, och det funkade det var vår programmerings-lärare som tyckte vi skulle köra med "keyboard".. ^^

Skrivet av Lillem4n:

Hej,

I java som är ett objektorienterat språk finns det någonting som kallas objekt. Ett objekt är en instans av en klass. Exempelvis så är din variabel "mår" en instans av klassen "String". Ett objekt har i sin tur någonting som kallas en referens vilket är en pekare på vart i arbetsminnet som detta objekt är lagrat.

När du då använder jämförelseoperatorn "==" så kollar du inte om värdet på din String är lika utan om båda strängarna refererar till samma objekt.
Därför ska du använda en metod i klassen String som heter .equals() som kollar om värdet är samma.

I ditt fall blir det alltså humör.equals("Ja");
Observera här att det bara kommer ge träffar på "Ja" och inte "ja","JA, eller "jA". Därför kan du istället använda humör.equalsIgnoreCase("Ja"); som skiter i om bokstäverna är i gemena eller versaler, bara det är samma bokstav.

***********************************************
En annan sak utöver ditt problem jag vill påpeka. Klassen Keyboard verkar inte ingå i javas standardbibliotek av klasser och du bör därför använda klassen Scanner istället som är standard om du inte har en specifik anledning att använda just klassen Keyboard.

Din kod skulle då se ut såhär:

import java.util.Scanner; //Här importeras klassen scanner så namnet "Scanner" känns igen i koden av kodprogrammet(IDE) public class Test { private static Scanner scan = new Scanner(System.in); //System.in innebär att den ska läsa ifrån det som skrivs public static void main(String[]args){ System.out.println("Är du glad?"); String mår = scan.nextLine(); System.out.println("Rätt åt dig!") ; System.out.println("Är du glad?"); String humör = scan.nextLine(); if(humör.equalsIgnoreCase("Ja")){ //Är svaret "ja" skrivs "Vad bra ut" System.out.println("Vad bra!") ; }else //else, annars om svaret är någonting annat än "ja","Ja","JA" eller "jA" så skriv "vad dåligt!" ut. System.out.println("vad dåligt!") ; } }

Jag Tackar så mycket, förstår nu! och jag ska börja använda Scanner istället.. Det var som sagt vår programmeringlärare som tyckte vi skulle använda "keyboard"..

-

Tack för er hjälp alla

Permalänk
Skrivet av ZecretW:

Du har fått en lösning på ditt problem men jag känner att jag behöver skriva detta med.
Att använda svenska tecken i variabelnamn är att be om bekymmer. Det ska funka i moderna kompilatorer men min erfarenhet är att det funkar i 99% av fallen och det är den sista procenten som råkar vara den man använder.
Bara ett tips från någon som kodat det mesta i över 20 år.. (Ja det finns gamlingar här med)

ja, alla tips tar jag tacksamt emot!
Ja, det är väl bra att det finns veteraner inom detta med, som vet vad som sysslar med!

Permalänk
Medlem

Är inte Keyboard något som bukar ingå i Jan Skansholm Java böcker? Tycker att jag har sett det flera gånger under åren och tror att det är källan till dem. På min tid (2000) så var det relativt jobbigt att läsa från konsolen i Java (man var tvungen att öppna flera strömmar och koppla samman dessa och lite annat pill) så det är nog därför som han eller någon annan har gjort denna Keyboard klass för att förenkla detta för nybörjare men nu finns det tydligen redan bättre lösningar direkt i språket och då finns det ingen anledning att använda dessa hemmabyggda hjälpklasserna längre. Visa läraren att språket har utvecklats och att det finns nya bättre sätt att lösa problemen på

/Viktor

Permalänk
Medlem

Ett annat tips är att ALDRIG använda "nån text" i koden. Använd ALLTID konstanter eller variabler. För helt plötsligt kommer tex. nån och ska ha ditt program på finska eller nått annat dumt och då byter du bara 'strings' filen.

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Skrivet av vg132:

Är inte Keyboard något som bukar ingå i Jan Skansholm Java böcker? Tycker att jag har sett det flera gånger under åren och tror att det är källan till dem. På min tid (2000) så var det relativt jobbigt att läsa från konsolen i Java (man var tvungen att öppna flera strömmar och koppla samman dessa och lite annat pill) så det är nog därför som han eller någon annan har gjort denna Keyboard klass för att förenkla detta för nybörjare men nu finns det tydligen redan bättre lösningar direkt i språket och då finns det ingen anledning att använda dessa hemmabyggda hjälpklasserna längre. Visa läraren att språket har utvecklats och att det finns nya bättre sätt att lösa problemen på

/Viktor

Jadu, bra fråga!
Men vår bok tycker också att man ska använda Keyboard.. :s

Ja, jag ska säga det till honom