Avatar billede backupmand Nybegynder
26. januar 2001 - 20:38 Der er 8 kommentarer og
1 løsning

vil ikke udskrive indhold af char-array

Hej,
Mit problem er lidt kompliceret og svært at forklare.
En opgave går ud på at få en metode til at genkende
en af de fire operatorer (+, -, /, *) i en formel,
man taster ind (input fra skærm). Tastes eksempelvis
32+12, skal metoden genkende +\'et(plus-operatoren).

jeg kan finde hvilken operator det drejer sig om
ved hjælp af charAt-metoden

System.out.println(\"Skriv en \'formel\' for et regnestykke: (afslut med enter) \");
    BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));
    String opt=bfr.readLine();
    System.out.println();
        Char []op=new char[opt.length()]; // arrayets stoerrelse er afgjort af strengens laengde
        for (i=0;i<opt.length();i++) //204
        {
          if (opt.charAt(i)!=(char)43||
              opt.charAt(i)!=(char)45||
              opt.charAt(i)!=(char)47||
              opt.charAt(i)!=(char)42)
          op[i]=opt.charAt(i); // laegger streng ind i char-array
        }
   
Der er sikkert nogle, der kan genkende opgaven. Den er fra kap 5 i Henrik
Kressner\'s Javabog..

Mit problem kommer når jeg skal udskrive arrayet. Jeg er ikke kommet videre
i opgaven, da der bare udskrives .. noget tomt, dvs ikke noget.

jeg forsøger at udskrive vha flg.
for (int i=0;i<op.length;i++)
    System.out.println(op[i]); // saa indhold kommer paa en linje, men NEJ!

tak for hjælpen.

Bm
Avatar billede jakoba Nybegynder
26. januar 2001 - 21:07 #1
1) linien
        Char []op=new char[opt.length()]; // arrayets stoerrelse er afgjort af strengens laengde
er måske lovlig men prøv alligevel at flytte blanktegnet om på den anden side af klammerne:
        Char[] op=new char[opt.length()]; // arrayets stoerrelse er afgjort af strengens laengde

når der findes en operator bliver den ikke flyttet over i op[i] men i inkrementeres alligevel så alligevel så op[] arrayet ender med at indeholde en udefineret værdi. Prøv at lægge en else på betingelsen:

        } else op[i] = \" \";

mvh JakobA
Avatar billede Slettet bruger
26. januar 2001 - 23:54 #2
Som din kode er skrevet, kan den ikke køre.

Der kan være sket følgende:

1. Din kode kan ikke kompilere, du har ikke opdaget det og tester på en gammel version.

2. Du har skrevet din kode forkert af.

I det sidste tilfælde er der en del, jeg ikke kan gennemskue:

a. \'Char []op...\' skal selvfølgelig, som jakoba skriver, være \'char[] op...\'.
b. Din \'if\'-sætning er sær. Der står: \"Hvis karakteren ikke er \'+\' eller ikke \'-\' eller ikke osv. Da karakteren jo ikke KAN være både \'+\', \'-\' osv. på een gang, får du alt med.

Prøv i stedet med:

public static void main(String[] args) {
    System.out.println(\"Skriv en \'formel\' for et regnestykke: (afslut med enter) \");
    BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
    String opt = null;
    try {
        opt = bfr.readLine();
    } catch (IOException ioe) {
        ioe.printStackTrace();
        return;
    }

    System.out.println();
    char[] op = new char[opt.length()];
    // arrayets stoerrelse er afgjort af strengens laengde
    for (int i = 0; i < opt.length(); i++) //204
        {
        switch (opt.charAt(i)) {
            default :
                break;
            case \'+\' :
            case \'-\' :
            case \'*\' :
            case \'/\' :
                op[i] = opt.charAt(i); // laegger operator ind i char-array
        }
    }
    for (int i = 0; i < op.length; i++)
        System.out.println(op[i]);
}
Avatar billede backupmand Nybegynder
30. januar 2001 - 13:49 #3
Joern h->
Den skriver kun operatoren ud, ikke hele formlen,
og jeg mener ikke jeg har tastet forkert ind.
(Udskriver nogle blanktegn på hver sin linje
og dernæst enten +,-,* osv
Avatar billede backupmand Nybegynder
30. januar 2001 - 13:51 #4
Jakoba->Jeg er iøvrigt opmærksom på Char er forkert,
det er fordi det ikke er copy/pastet fra
editoren, men skrevet ind direkte her.
Avatar billede pstric Nybegynder
02. februar 2001 - 12:21 #5
backupmand>> Vil du ikke lukke nogle af dine gamle spørgsmål?
Avatar billede tjuul Nybegynder
05. februar 2001 - 14:08 #6
Hej

Du benytter følgende kode der ikke virker:
for (int i=0;i<op.length;i++)
    System.out.println(op[i]);

Hvis du i stedet skriver:
for (int i=0;i<op.length();i++)
    System.out.print(op.charAt(i));

Så skulle det virke!
Avatar billede jmarkling Nybegynder
06. februar 2001 - 15:32 #7
Både tjull og backupmand, har fejl i deres for-løkke.
array.length er ikke en metode, men en instans variable af array objektet. Der er derfor ingen paranteser efter length 
Avatar billede tjuul Nybegynder
07. februar 2001 - 09:24 #8
det er nu ikke en fejl.
Det er rigtig nok en instansvariable der indeholder længden, men der er nu også en metode der kan returnere længden.
Avatar billede jmarkling Nybegynder
07. februar 2001 - 23:41 #9
min fejl.
Jeg overså at opt var String, og backupmands kode er god nok.
tjull\'s for-løkke er desværre stadigvæk forkert den skal enten rettes til
for(int i=0;i<opt.length();i++)//opg er String og length() er en metode.
el. for(int i=0;i<op.length;i++)//op er et Array og length er en instans variabel.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester