DontTouchMyPhone Skrevet 22. september 2014 Del Skrevet 22. september 2014 (endret) Hei! Jeg driver å knoter med java, og tror jeg gjør saker og ting veldig tungvint (jeg tenker riktig tror jeg, men kludrer det til når det skal kodes). Det følgende programmet kompileres uten problemer, men gjør ikke det jeg ønsker det skal gjøre (det står øverst i programmet hva hensikten er). Kan noen si meg hva jeg gjør feil? Og poenget med oppgaven var også at jeg skulle bruke indexOf og eventuelt || && == osv. Noen som kan hjelpe? ** * Programmet skal finne ut om en setning/et ord er enkelnorsk eller ikke. * Setningen er enkelnorsk dersom den inneholder æ, ø, eller å, samtidig som * den ikke inneholder c, q, w, x eller z. * Eksemplerord: smørbrød = enkelnorsk * cellulose = ikke enkelnorsk * sement = ikke enkelnorsk. */ import static javax.swing.JOptionPane.*; class Enkelnorsk{ public static void main(String[]args){ String tekstLest = showInputDialog ("Skriv teksten her:"); int pos = tekstLest.indexOf('c'); int pos2= tekstLest.indexOf('q'); int pos3= tekstLest.indexOf('w'); int pos4= tekstLest.indexOf('x'); int pos5 = tekstLest.indexOf('z'); int pos6 = tekstLest.indexOf('æ'); int pos7 = tekstLest.indexOf('ø'); int pos8 = tekstLest.indexOf('å'); if ((pos>-1) || (pos2>-1) || (pos3>-1) || (pos4>-1) || (pos5>-1)){ showMessageDialog (null, "Denne teksten er ikke på enkelnorsk."); } else if (!(pos6>-1) || !(pos7>-1) || !(pos8>-1)){ showMessageDialog (null, "Denne teksten er ikke på enkelnorsk."); } else if (((pos6>-1) || (pos7>-1) || (pos8>-1)) && (!(pos>-1) || !(pos2>-1) || !(pos3>-1) || !(pos4>-1) || !(pos5>-1))){ showMessageDialog (null, "Denne teksten er på enkelnorsk."); } } } Endret 22. september 2014 av Omicron2 Lenke til kommentar
Emancipate Skrevet 22. september 2014 Del Skrevet 22. september 2014 (endret) Har du lært deg å loope med while eller for? Edit: uten å gjøre endringer for øvrig, bør pos hete pos1 for ryddighet. I virkeligheten kommer du til å bruke en array, men jeg vet ikke om du har lært om arrays enda. Endret 22. september 2014 av Tåkelur Lenke til kommentar
DontTouchMyPhone Skrevet 22. september 2014 Forfatter Del Skrevet 22. september 2014 (endret) Nei, dit har jeg ikke kommet ennå. Edit: Og har ikke lært om arrays heller dessverre. indexOf hører i utgangspunktet også til et langt senere kapittel i boka, men fikk det til i en annen oppgave og skulle bruke det i denne også. Jeg tar poenget ditt med pos1; helt enig i det. Endret 22. september 2014 av Omicron2 Lenke til kommentar
Emancipate Skrevet 22. september 2014 Del Skrevet 22. september 2014 Og så må du indentere koden skikkelig og putte den i code tags når du posten den her på forumet. Siter meg for å se hvordan jeg har gjort det. ** * Programmet skal finne ut om en setning/et ord er enkelnorsk eller ikke. * Setningen er enkelnorsk dersom den inneholder æ, ø, eller å, samtidig som * den ikke inneholder c, q, w, x eller z. * Eksemplerord: smørbrød = enkelnorsk * cellulose = ikke enkelnorsk * sement = ikke enkelnorsk. */ import static javax.swing.JOptionPane.*; class Enkelnorsk{ public static void main(String[]args){ String tekstLest = showInputDialog ("Skriv teksten her:"); int pos = tekstLest.indexOf('c'); int pos2= tekstLest.indexOf('q'); int pos3= tekstLest.indexOf('w'); int pos4= tekstLest.indexOf('x'); int pos5 = tekstLest.indexOf('z'); int pos6 = tekstLest.indexOf('æ'); int pos7 = tekstLest.indexOf('ø'); int pos8 = tekstLest.indexOf('å'); if ((pos>-1) || (pos2>-1) || (pos3>-1) || (pos4>-1) || (pos5>-1)){ showMessageDialog (null, "Denne teksten er ikke på enkelnorsk."); } else if (!(pos6>-1) || !(pos7>-1) || !(pos8>-1)){ showMessageDialog (null, "Denne teksten er ikke på enkelnorsk."); } else if (((pos6>-1) || (pos7>-1) || (pos8>-1)) && (!(pos>-1) || !(pos2>-1) || !(pos3>-1) || !(pos4>-1) || !(pos5>-1))){ showMessageDialog (null, "Denne teksten er på enkelnorsk."); } } } Lenke til kommentar
DontTouchMyPhone Skrevet 22. september 2014 Forfatter Del Skrevet 22. september 2014 (endret) Takker for svar forresten; godt å få hjelp av folk med peiling. Beklager; det er første gang jeg legger inn programkode; så det blei rotete, men visste ikke hvordan jeg skulle gjøre det. Hva står > for? Jeg lurte litt på om det var mulig å legge pos1 til pos5 i samme "sekk" (likeledes med pos6-8), slik at jeg ikke behøvde å ramse dem opp senere i oppgaven. Men det er kanskje sånn det skal være? (Jeg stikker av en stund nå; håndballtrening, men dukker opp igjen så fort jeg kan. Takker for all input!) Endret 22. september 2014 av Omicron2 Lenke til kommentar
Emancipate Skrevet 22. september 2014 Del Skrevet 22. september 2014 Glem >, det var en feil som kom av programmet jeg brukte til å formatere koden med (som man normalt gjør får hånd). Dette med å legge verdiene i samme sekk kalles arrays, og det hadde du ikke kommet til ennå. Lenke til kommentar
Emancipate Skrevet 22. september 2014 Del Skrevet 22. september 2014 Det kan bli mer oversiktlig ved å ha forskjellig navn på de bokstavene du skal ha, og de du ikke skal ha. /** * Programmet skal finne ut om en setning/et ord er enkelnorsk eller ikke. * Setningen er enkelnorsk dersom den inneholder æ, ø, eller å, samtidig som * den ikke inneholder c, q, w, x eller z. * Eksemplerord: smørbrød = enkelnorsk * cellulose = ikke enkelnorsk * sement = ikke enkelnorsk. */ import static javax.swing.JOptionPane.*; class Enkelnorsk2 { public static void main(String[]args){ String tekstLest = showInputDialog ("Skriv teksten her:"); int not1 = tekstLest.indexOf('c'); int not2= tekstLest.indexOf('q'); int not3= tekstLest.indexOf('w'); int not4= tekstLest.indexOf('x'); int not5 = tekstLest.indexOf('z'); int yes1 = tekstLest.indexOf('æ'); int yes2 = tekstLest.indexOf('ø'); int yes3 = tekstLest.indexOf('å'); if ((yes1 > -1 || yes2 > -1 || yes3 > -1) && /* sjekk inni parentesen at teksten inneholder minst en av æøå. */ not1 == -1 && /* Og i tillegg skal ingen av de andre bokstavene være funnet */ not2 == -1 && not3 == -1 && not4 == -1 && not5 == -1) { // teksten er på enkelnorsk showMessageDialog (null, "Denne teksten ER på enkelnorsk."); } else { // teksten er ikke på enkelnorsk showMessageDialog (null, "Denne teksten er IKKE på enkelnorsk."); } } } ----- ~ ~ ----- Bonusspm 1: Forstå hvordan/hvorfor dette virker. Bonusspm 2: Hvorfor skal du ikke gjøre det sånn? /** * Programmet skal finne ut om en setning/et ord er enkelnorsk eller ikke. * Setningen er enkelnorsk dersom den inneholder æ, ø, eller å, samtidig som * den ikke inneholder c, q, w, x eller z. * Eksemplerord: smørbrød = enkelnorsk * cellulose = ikke enkelnorsk * sement = ikke enkelnorsk. */ import static javax.swing.JOptionPane.*; class Enkelnorsk{ public static void main(String[]args){ String tekstLest = showInputDialog ("Skriv teksten her:"); int not1 = tekstLest.indexOf('c'); int not2= tekstLest.indexOf('q'); int not3= tekstLest.indexOf('w'); int not4= tekstLest.indexOf('x'); int not5 = tekstLest.indexOf('z'); int yes1 = tekstLest.indexOf('æ'); int yes2 = tekstLest.indexOf('ø'); int yes3 = tekstLest.indexOf('å'); if (yes1+yes2+yes3 > -3 && /* Vi har mer enn én av æ ø å, ellers ville vi fått -3, ettersom tre*-1 blir -3 */ not1+not2+not3+not4+not5 == -5) /* Vi har ingen av styggbokstavene */ { // teksten er på enkelnorsk showMessageDialog (null, "Denne teksten ER på enkelnorsk."); } else { // teksten er ikke på enkelnorsk showMessageDialog (null, "Denne teksten er IKKE på enkelnorsk."); } } } Lenke til kommentar
DontTouchMyPhone Skrevet 22. september 2014 Forfatter Del Skrevet 22. september 2014 (endret) Hmm, skal vi se. Jeg tror det virker fordi tellingen av bokstavene begynner på 0. Dermed er bokstaven tilstede dersom f.eks. pos1>-1. Den er ikke tilstede dersom pos1 == -1. Men jeg forstår ikke hvorfor det ikke skal skrives slik. Den første lille snutten med indexOf ble som følger : /* Fin bokstaven c dersom den eksisterer, og oppgi hvilken plassering den har. * Dersom den ikke fins, opplys om dette. */ import static javax.swing.JOptionPane.*; class FinnC{ public static void main(String[]args){ String tekstLest = showInputDialog ("Skriv din tekst her:"); int pos = tekstLest.indexOf('c'); if (pos>-1) { showMessageDialog (null, "Den første c`en står i posisjon "+ pos +"."); } else { showMessageDialog (null, "Det er ingen c i teksten."); } } } Er dette også feil bruk av indexOf? Endret 22. september 2014 av Omicron2 Lenke til kommentar
Emancipate Skrevet 22. september 2014 Del Skrevet 22. september 2014 Men jeg forstår ikke hvorfor det ikke skal skrives slik.Det går an, men det er klønete, for man må tenke for å forstå det, og det gjør at programmet blir mer vanskelig å vedlikeholde, noe som er viktig når man har programmer med 100000 linjer kode som skal vedlikeholdes i 5-10 år eller lenger. --- Nei, det ser riktig ut. Lenke til kommentar
DontTouchMyPhone Skrevet 22. september 2014 Forfatter Del Skrevet 22. september 2014 Jeg skjønner godt hva du mener, jeg synes det er rotete selv. Jeg forstår ikke riktig hvordan jeg skal bruke indexOf i denne oppgaven for å få det til å se ryddig og oversiktlig ut. Koden du skrev i innlegg 7 ser jo bra ut, er det måten å skrive denne oppgaven på når man MÅ bruke indexOf? Det er ikke så lett å få oversikten merker jeg, og når koden blir så grumsete som den jeg skrev blir det enda vanskeligere. Dessuten irriterer det meg litt at jeg jo fint forstår koden jeg skrev i innlegg 8, men likevel ikke klarer å "bruke" den fornuftig i en utvidet oppgave. Lenke til kommentar
Emancipate Skrevet 22. september 2014 Del Skrevet 22. september 2014 Det finnes ikke noen fasit. Lenke til kommentar
DontTouchMyPhone Skrevet 22. september 2014 Forfatter Del Skrevet 22. september 2014 Det tror jeg på. Men har forstått viktigheten av at koden skal være lett å vedlikeholde, og at visse regler bør følges. I grunn skulle jeg ønske jeg kunne tatt et kurs lokalt; det blir litt lite "hands-on" over nett, tror et klasseromsmiljø paradoksalt nok kunne vært tingen. Men, det er jo bare å fortsette å prøve. Ofte synes jeg logikken bak er lett nok å forstå, mens kodingen blir noe knot. Takk forøvrig for all hjelp; det er nok ikke siste gangen jeg trenger hjelp til å forstå hvorfor en kodebit ikke gjør det den skal. Lenke til kommentar
jonny Skrevet 23. september 2014 Del Skrevet 23. september 2014 Hvis du skal bruke 'String.indexOf()' og ikke bruke løkker, kan du gjøre det slik: public static void main(String[] args) { String tekstLest = showInputDialog("Skriv teksten her:"); String tekstSB = tekstLest.toLowerCase(); boolean harNorskeTegn = (tekstSB.indexOf('æ') != -1) || (tekstSB.indexOf('ø') != -1) || (tekstSB.indexOf('å') != -1); boolean harCQWXZ = (tekstSB.indexOf('c') != -1) || (tekstSB.indexOf('q') != -1) || (tekstSB.indexOf('w') != -1) || (tekstSB.indexOf('x') != -1) || (tekstSB.indexOf('z') != -1); showMessageDialog(null, "Denne teksten er " + (harNorskeTegn && !harCQWXZ ? "" : "ikke ") + "på enkeltnorsk."); } Lenke til kommentar
Laserbeam Skrevet 14. juni 2016 Del Skrevet 14. juni 2016 (endret) Du kan også bruke: String.contains String tekstLest = showInputDialog ("Skriv din tekst her:"); // Sjekker om teksten inneholder tegnene æ, ø ELLER å. Verdien blir true hvis den finner en av tegnene og false hvis den finner ingen bool harNorskeTegn = tekstLest.Contains("æ") || tekstLest.Contains("ø") || tekstLest.Contains("å"); // Sjekker om teksten inneholder tegnene c, q, w, x ELLER z. Verdien blir true hvis den finner en av tegnene og false hvis den finner ingen bool harCQWXZ = tekstLest.Contains("c") || tekstLest.Contains("q") || tekstLest.Contains("w") || tekstLest.Contains("x") || tekstLest.Contains("z"); // Sjekker om variablen harNorskeTegn = true (har funnet noen norske tegn) // Sjekker også om variablen harCQWXZ = false (derav ! foran variablenavnet) if (harNorskeTegn && !harCQWXZ) { // Hvis harNorskeTegn er true OG harCQWXZ er false, så er teksten norsk showMessageDialog(null, "Denne teksten er norsk.") } else { // Hvis harNorskeTegn er false ELLER harCQWXZ er true, så er teksten ikke helnorsk showMessageDialog(null, "Denne teksten er ikke helnorsk.") } Endret 14. juni 2016 av Gnålern Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå