Gå til innhold

Nybegynner: hjelp til enkel kodebit (hva gjør jeg feil)


Anbefalte innlegg

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 av Omicron2
Lenke til kommentar
Videoannonse
Annonse

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

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 &gt 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 av Omicron2
Lenke til kommentar

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

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 av Omicron2
Lenke til kommentar

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

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

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

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
  • 1 år senere...

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 av Gnålern
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...