Java swing Hjälp med att räkna ord.

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Feb 2009

Java swing Hjälp med att räkna ord.

Hej nu är det så att jag är en total nybörjare när det gäller allt som har med programmering o göra, kan i princip bara grunderna och även dom är ganska skakiga för mig.

Just nu håller jag på att bli galen över en simpel övnings uppgift där jag ska skapa en loop där man får skriva in olika texter om och om igen för att sedan bryta loopen och då ska en ruta berätta vilken text som var längst och hur lång
den texten var.

allting är grönt för mig fram tills jag ska få programmet att hitta den längsta texten som skrevs in. Så fram tills dess har jag fått fram detta:

import javax.swing.*; public class SimpelOvning { public static void main(String[] arg) { while (true) { String Texten; Texten = JOptionPane.showInputDialog("skriv en text här avsluta med tja då"); if (Texten.equalsIgnoreCase("tja då")) break; } } }

sen har jag faktiskt ingen aning om resten, försökte använda mig av length så att den skulle räkna det ordet man skrev in men det slutade bara med att den räknade ordet tja då som då visar sex bokstäver :S.

Letat i alla möjliga tutorials om just detta men utan framgång så jag bestämde mig för att skapa denna tråd

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007

I varje iteration av while-loopen så skapar du en ny sträng, tilldelar den vad användaren skriver in, och kollar om den är lika med "tja då". Texten-variabeln försvinner så fort du avslutar den aktuella iterationen, så du sparar ju aldrig texten som skrivs in. Om du vill kunna skriva ut den längsta strängen som skrivits in så får du antingen spara alla strängar som skrivs in och gå igenom dem efteråt, eller så räcker det ju i det här fallet att bara spara den längsta strängen som hittills skrivits in. Mitt tips är att göra båda alternativen, de lär ut olika men viktiga tekniker

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2004

Det du ser ut att behöva är att först tänka igenom lite vad som egentligen ska hända. Det kallas psuedo-kod att programmera i tankar. Det kan, på en nivå för nybörjare, se ut såhär:

så länge (den text man skrev in inte är tom){ räkna hur många tecken som skrevs in; om (detta var det högsta antalet tecken hittills){ lagra det nya högsta antalet tecken; } låt användaren skriva in en ny text; }

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Feb 2009

Nä fortfarande lika hopplöst, försökte med att spara värdet på den längsta texten med en int variabel som jag sedan skulle jämföra med en annan int variabel som då alltid skulle vara ett tal större.

Men detta fungerade ju självklart inte så nu är jag tillbaka på ruta ett. finns det något simpelt sätt att spara de texterna som skrivs in i while satsens inputDialog?

Är jag överhuvudet taget på rätt spår? Detta är vad jag åstadkommit:

import javax.swing.*; public class SimpelOvning { public static void main(String[] arg) { String Texten; int sparad, jämförelse; jämförelse = 0; while (true) { Texten = JOptionPane.showInputDialog("skriv en text här avsluta med tja då"); sparad = Texten.length(); jämförelse = jämförelse + sparad; if (Texten.equalsIgnoreCase("tja då")) break; } if (sparad < jämförelse) JOptionPane.showMessageDialog(null, "den var längst"); } }

Vet att det inte fungerar och vet att det var en ganska idiotisk ide men jag är helt ny till detta som sagt.

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Feb 2009

Nej jag tror detta är för avancerat för mig ger nog upp men tack för hjälpen ändå.

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2004

Tar från huvudet bara, ej testat:

public class SimpelOvning { public static void main(String[] arg) { String Texten; int längstaText = 0; while (true) { Texten = JOptionPane.showInputDialog("Skriv en text här"); if (Texten.equals("")) break; // inget skrevs in - avsluta if (längstaText < Texten.length()) längstaText = Texten.length(); } JOptionPane.showMessageDialog(null, "Längsta ordet: " + längstaText); } }

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Feb 2009

Det funka tusen tack! Var ju själv inne på dom spåren, nu gäller det bara för mig att förstå allt. Är det någon som kan tipsa om en bra toturial på internet eller kanske en bok man kan låna vore underbart.

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Feb 2009

är det helt omöjligt att göra så att ordet syns istället för dess längd?
Tror jag ska försöka ta mig an det som min nästa utmaning eller är det way to hard

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2004

Nej prova det! Just nu sparas bara längden av ordet, spara även själva ordet (Texten) till en variabel. Simsalabim

En till ledtråd:

if (längstaText < Texten.length()) { längstaText = Texten.length(); // här ska du göra något... tänk efter lite! }

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Feb 2009

public static void main(String[] arg) { String Texten, sparad; int längstaTexten; längstaTexten = 0; sparad = ""; while (true) { Texten = JOptionPane.showInputDialog("skriv här"); if (Texten.equals("tja då")) break; if (längstaTexten < Texten.length()) längstaTexten = Texten.length(); sparad = Texten; } JOptionPane.showMessageDialog(null, "Längsta ordet: " + längstaTexten + " Det var " + sparad); } }

Obs såg nu att detta inte funka då den endast visar det senast skrivna ordet, men antar att jag är på rätt spår endå

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Feb 2009

yes nu fixade jag det på riktigt! if satsen skulle se ut så här:

if (längstaTexten <= Texten.length())
sparad = Texten;

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2004

Du glömmer bara måsvingarna. När det bara är en rad efter en if-sats går det bra att utelämna måsvingar, men när det är flera rader måste de till.

Alltså:

if (längstaTexten < Texten.length()) { längstaTexten = Texten.length(); sparad = Texten; }

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Apr 2002

Om man väljer att spara texten så är det meningslöst att spara längden på texten då den kan nås via lenght()

CPU: i7 6700k + Fractal Design S24 GPU: ASUS GeForce GTX 1070 8GB DUAL OC RAM: Kingston 16GB 2133MHz CL13 MB: MSI GAMING M7 PSU: EVGA Supernova G2 850W, 80+ Gold SSD: Samsung SM951 256GB M.2 NVMe + Samsung EVO 850 250GB M.2 Chassi: Fractal Design S OS: W10 Pro Skrämar: Acer XB270HU + 2x Dell U2412M
NAS: Synology DS415+ (4x WD RED 6 TB) Console: Xbox One

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2005
Citat:

Ursprungligen inskrivet av Tino
Om man väljer att spara texten så är det meningslöst att spara längden på texten då den kan nås via lenght()

Hur har du då tänkt att veta vilken inmatad text det är som är längst?

Keytronic for keyboard!
Sanningen måste döljas!

Trädvy Permalänk
Hedersmedlem
Plats
Märsta
Registrerad
Jan 2002

*code-taggar fixade*

Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG

Trädvy Permalänk
Hedersmedlem
Plats
Märsta
Registrerad
Jan 2002
Citat:

Ursprungligen inskrivet av Random-person
Hur har du då tänkt att veta vilken inmatad text det är som är längst?

Jämföra med .length() från den sparade texten.

if (längstaTexten.length() < Texten.length())

längstatexten ska vara en String som innan loopen initieras till en tom sträng.

Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG