Avatar billede musicchart.dk Nybegynder
24. september 2002 - 18:38 Der er 31 kommentarer og
1 løsning

Fejl i prog.

Hey

Hvorfor får jeg en fejl her?:

int tal1=Integer.parseInt(textFieldN1.getText());
int tal2=Integer.parseInt(textFieldQ.getText());
if (tal1 = ""){
textFieldRes1.setText("du skal indtaste en n-værdi!");
}


...fejlen:
incompatible types
found: int
required: boolean
    if (tal1 = ""){
        ^



//Bjarke - [KLEIFDEISGN]
Avatar billede bearhugx Nybegynder
24. september 2002 - 18:44 #1
du kan ikke skrive
if( tal1 = "")  <-- Sammenligning af en int og en String

istedet skal du gøre følgende

if ( textFieldN1.getText().equals("") ) {
....
}

/Søren Munk Skrøder
Avatar billede jakoba Nybegynder
24. september 2002 - 18:44 #2
du har erklæret tal1 til at være integer. men her prøver du at give den en streng som værdi:
    if (tal1 = ""){
ved sammenligning skal det bruges ==  (2 lighedstegn) men det er under alle omstændigheder forkert at sammenligne en int med en streng.

husk hvad typer dine variable har. Jave finder sig ikke i at du glemmer det :-)

mvh JakobA
Avatar billede bearhugx Nybegynder
24. september 2002 - 18:45 #3
^ ovenstående som svar ^
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 18:49 #4
jakoba >> jo, men selv når jeg ændrer den til:

tal1=Integer.parseInt(textFieldN1.getText());
if (tal1 == ""){
...

så kommer den stadig med fejl??
Avatar billede bearhugx Nybegynder
24. september 2002 - 18:49 #5
du har ret, jacoba - jeg havde ikke set at der kun var et '=' og så er det ikke sammenligning, men tildeling af værdi (at tildele en int en String-værdi)

min rettelse er dog stadigvæk gældende

/Søren
Avatar billede bearhugx Nybegynder
24. september 2002 - 18:51 #6
har du prøvet min rettelse ????
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 18:52 #7
bearhugx >> nej, fordi jeg forstår den ikke rigtigt, og da jeg er ved at lave et prog. til en skoleopgave, nytter det ikke at jeg har noget i min kode som jeg ikke forstår...
Avatar billede bearhugx Nybegynder
24. september 2002 - 18:56 #8
ok...

for at sammenligne to tekststrenge skal man bruge metoden .equals() på String-objektet

textFieldN1.getText() returnerer en String ... og på den kaldes så .equals() hvori parameteren er "" (tom streng) ...
dvs. der testes om tekststrengen, som holdes af textFieldN1 er lig med "" (tom streng)

er forklaringen fyldestgørende ?

/Søren
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 18:59 #9
ok, tak for forklaringen ;0)... men det virker ikke.
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 19:00 #10
...jeg får ikke en fejl, men det virker bare ikke i programmet
Avatar billede bearhugx Nybegynder
24. september 2002 - 19:00 #11
det virker ikke ???

Kommer der en fejlmeddelse eller ???
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 19:01 #12
her er koden (det er det nederste, ved for-sætningerne):

import java.awt.*;
import java.applet.*; 
import java.awt.event.*;

public class projekt1 extends Applet
implements ActionListener
{
   
    TextField textFieldN1 = new TextField(5);
    TextField textFieldRes1 = new TextField(30);
    TextField textFieldQ = new TextField(5);
    TextField textFieldRes2 = new TextField(30);
    Button resultat1 = new Button("Beregn");
    Button resultat2 = new Button("Beregn"); 
    long nRes = 0;

    public void init() {
      Panel panel=new Panel(); 
      Panel panel2=new Panel(); 
      setLayout(new BorderLayout());
      Label  label = new Label("Beregning af n-fakultet:                    n  = ");
      Label  label2 = new Label("          resultat  = ");
      Label  label4 = new Label("Beregning af n,q-kombination:        q  = ");
      Label  label5 = new Label("          resultat  = ");
      Label  label6 = new Label("Copyright by Bjarke Kleif 2002, visit www.mypage.dk          v1");
      resultat1.addActionListener(this);
      resultat2.addActionListener(this);
      textFieldN1.addActionListener(this);
      textFieldRes1.addActionListener(this);
      textFieldQ.addActionListener(this);
      textFieldRes2.addActionListener(this);
      panel.add(label);
      panel.add(textFieldN1);
      panel.add(resultat1);
      panel.add(label2);
      panel.add(textFieldRes1);
      panel2.add(label4);
      panel2.add(textFieldQ);
      panel2.add(resultat2);
      panel2.add(label5);
      panel2.add(textFieldRes2);
      add("North",panel);
      add("Center",panel2);
      add("South",label6);
    }

public void actionPerformed(ActionEvent e) {
    Object obj = e.getSource();
    if (obj == resultat1) {
      int i=1;
      long tal1=Integer.parseInt(textFieldN1.getText());
    for ( long n = 1; i <= tal1; i++){
    n = n*i;
        if (i == tal1){
          textFieldRes1.setText("n! af " + tal1 + " er " + n);
        }
      }
    }
    if (obj == resultat2) {
      int tal1=Integer.parseInt(textFieldN1.getText());
      int tal2=Integer.parseInt(textFieldQ.getText());
      if ( textFieldN1.getText().equals("") ) {
        textFieldRes1.setText("du skal indtaste en n-værdi!");
      }
      else{
        if ( textFieldN1.getText().equals("") ) {
        textFieldRes1.setText("du skal indtaste en q-værdi!");
        }
        else{
      if (tal1 <= tal2){
        textFieldRes2.setText(" ");
        textFieldRes1.setText("n skal være større end q!");
        }
        else{
    textFieldRes1.setText(" ");
    int tal3 = tal1 - tal2;
      int i=1;
    for ( long p = 1; i <= tal3; i++){
    p = p*i;
        if (i == tal3){
      int j=1;
    for ( long n = 1; j <= tal1; j++){
    n = n*j;
        if (j == tal1){
        nRes = n;
      int u=1;
    for ( long m = 1; u <= tal2; u++){
    m = m*u;
        if (u == tal2){
      long nqRes = nRes / (m*p);
      textFieldRes2.setText("kombinatorik af n,q er " + nqRes);
}
}
}
}
}
}       
}
      }
    }

}
  }
 
}
Avatar billede bearhugx Nybegynder
24. september 2002 - 19:05 #13
Ok ... Den kode skal jeg lige have omformateret for at kunne hitte hoved og hale i...


-- Jeg foreslår at der bruges nogle mere sigende navne for variabler --

/Søren
Avatar billede jakoba Nybegynder
24. september 2002 - 19:05 #14
indrykninger, indrykninger, indrykninger, indrykninger, indrykninger ! ! ! ! !
Avatar billede bearhugx Nybegynder
24. september 2002 - 19:07 #15
er igang ... :-)
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 19:11 #16
jakoba >> ja ja, ska nok :o)

bearhugx >> ok, det er et prog. til at udregne fakultet og n,q-kombination, det løser jeg ved brug af for-sætninger... det virker fint nok, jeg er næsten færdig, er bare i gang med at lave error-handlers.
Når man trykker på "resultat2" og "textFieldN1" er tom, så skal der i "textFieldRes1" skrives "du skal indtaste en n-værdi", og hvis "textFieldQ" er er tom, skal der i "textFieldRes1" skrives "du skal indtaste en q-værdi".

(der er en fejl, er kommet til at skrive "textFieldN1", ved begge to)
Avatar billede bearhugx Nybegynder
24. september 2002 - 19:16 #17
:-)) Heldigvis har Eclipse (min JavaEditor en automatisk Format-funktion, så koden bliver, som den skal være "with-a-click-of-a-button" :-)
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 19:18 #18
bearhugx >> ja, se JEG bruger bare notepad :-)
Avatar billede bearhugx Nybegynder
24. september 2002 - 19:21 #19
du kan hente Eclipse gratis fra Eclipse.org -- men være beredt på at den sluger en del mere ressourcer end Notepad :-)
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 19:22 #20
ok, kan den oss selv compile?
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 19:28 #21
?? - er der nogen
Avatar billede bearhugx Nybegynder
24. september 2002 - 19:36 #22
ja ...

er der koden -- og den virker -- men der bliver ikke testet for at man kommer til at taste bogstaver i felterne - der vil man få exception (ved parsingen) -- men dette er for at få dig startet :-))

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Projekt1 extends Applet implements ActionListener {

    TextField textFieldN1 = new TextField(5);
    TextField textFieldRes1 = new TextField(30);
    TextField textFieldQ = new TextField(5);
    TextField textFieldRes2 = new TextField(30);
    Button resultat1 = new Button("Beregn");
    Button resultat2 = new Button("Beregn");
    long nRes = 0;

    public void init() {
        Panel panel = new Panel();
        Panel panel2 = new Panel();
        setLayout(new BorderLayout());
        Label label =
            new Label("Beregning af n-fakultet:                    n  = ");
        Label label2 = new Label("          resultat  = ");
        Label label4 = new Label("Beregning af n,q-kombination:        q  = ");
        Label label5 = new Label("          resultat  = ");
        Label label6 =
            new Label("Copyright by Bjarke Kleif 2002, visit www.mypage.dk          v1");
        resultat1.addActionListener(this);
        resultat2.addActionListener(this);
        textFieldN1.addActionListener(this);
        textFieldRes1.addActionListener(this);
        textFieldQ.addActionListener(this);
        textFieldRes2.addActionListener(this);
        panel.add(label);
        panel.add(textFieldN1);
        panel.add(resultat1);
        panel.add(label2);
        panel.add(textFieldRes1);
        panel2.add(label4);
        panel2.add(textFieldQ);
        panel2.add(resultat2);
        panel2.add(label5);
        panel2.add(textFieldRes2);
        add("North", panel);
        add("Center", panel2);
        add("South", label6);
    }

    public void actionPerformed(ActionEvent e) {
        Object obj = e.getSource();
        if (obj == resultat1) {
            int resultat = 1;
            long noOfTal = Integer.parseInt(textFieldN1.getText());
            for (int n = 1; n <= noOfTal; n++) {
                resultat = resultat * n;
            }
            textFieldRes1.setText("n! af " + noOfTal + " er " + resultat);
        } else if (obj == resultat2) {

            boolean safeToGo = true;
            if (textFieldN1.getText().equals("")) {
                textFieldRes1.setText("du skal indtaste en n-værdi!");
                safeToGo = false;
            }
            if (textFieldN1.getText().equals("")) {
                textFieldRes1.setText("du skal indtaste en q-værdi!");
                safeToGo = false;
            }
           
            if(safeToGo) {
                int tal1 = Integer.parseInt(textFieldN1.getText());
                int tal2 = Integer.parseInt(textFieldQ.getText());
               
                if (tal1 <= tal2) {
                    textFieldRes2.setText(" ");
                    textFieldRes1.setText("n skal være større end q!");
                } else {
                    textFieldRes1.setText(" ");
                    int tal3 = tal1 - tal2;
                    int i = 1;
                    for (long p = 1; i <= tal3; i++) {
                        p = p * i;
                        if (i == tal3) {
                            int j = 1;
                            for (long n = 1; j <= tal1; j++) {
                                n = n * j;
                                if (j == tal1) {
                                    nRes = n;
                                    int u = 1;
                                    for (long m = 1; u <= tal2; u++) {
                                        m = m * u;
                                        if (u == tal2) {
                                            long nqRes = nRes / (m * p);
                                            textFieldRes2.setText(
                                                "kombinatorik af n,q er " + nqRes);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
Avatar billede bearhugx Nybegynder
24. september 2002 - 19:40 #23
Og ja -- Eclipse kan også compile ved tryk på en knap ... Nej - der er faktisk ingen knap -- for den compiler mens du skriver (inkrementiel kompilering) ... Og derved kan den gøre dig opmærksom på, hvor koden halter henne --  Den har code-completion og integeret debugger ...

Og meget mere...!

Alt i alt er jeg meget godt tilfreds med den :-))

Grunden til at det tog lidt længere tid, var at jeg lige skulle hente et tillægsprogram til at launche appletter inden i eclipse - men det var en 74kb download :-))

/Søren
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 19:44 #24
hvad er dette:
boolean safeToGo = true;
safeToGo = false;

??
Avatar billede bearhugx Nybegynder
24. september 2002 - 19:45 #25
hmm et tilfælde har jeg glemt -- og det er hvis du ikke indtaster noget i forbindelse med n! --
men der skal koden være

            long resultat = 1;
            if(!textFieldN1.getText().equals(""))
            {
                long noOfTal = Integer.parseInt(textFieldN1.getText());
                for (int n = 1; n <= noOfTal; n++) {
                    resultat = resultat * n;
                }
                textFieldRes1.setText("n! af " + noOfTal + " er " + resultat);
            } else {
                textFieldRes1.setText("du skal indtaste et tal");
            }               
/Søren Munk Skrøder
Avatar billede bearhugx Nybegynder
24. september 2002 - 19:49 #26
safeToGo ... Hvis der ikke er indtastet noget som helst i n og q felterne, så vil din applet crashe, når du prøver at parse strengen -- så det er fordi at der ikke endnu er Exception-handling implementeret endnu - at der er lavet den workarround ...

Kort sagt, så siger den at det er "safeToGo" inden den tester om der er noget i henholdsvis n og q feltet -- men hvis der i en af dem ikke er indtastet noget, så blive safeToGo falsk - og derved eksekveres parsingen ikke ...
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 19:55 #27
ok 2 spm:

er dette:
if(safeToGo)
det samme som:
if (safeToGo = True)
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 19:56 #28
...og hvad betyder "boolean"
Avatar billede bearhugx Nybegynder
24. september 2002 - 19:59 #29
1> Ja
2> boolean .. Et boolsk udtryk ... dvs. kan antage værdierne sand eller falsk (true / false)
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 19:59 #30
ok, tusind tak for hjælpen!!... :-)
Avatar billede bearhugx Nybegynder
24. september 2002 - 20:01 #31
ups .. igen overså jeg det !!

er dette:
if(safeToGo)
det samme som:
if (safeToGo = True)  <--- NEJ!

Men det er det samme som
if (safeToGo == true) 

:-)))

se evt. indlæg @ 24/09-2002 18:49:50
Avatar billede musicchart.dk Nybegynder
24. september 2002 - 20:09 #32
...Argh, jeg glemmer det sku' altid, jeg er ikke vant til at programmere i Java, så hellere VisualBasic eller ASP ... :-)
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