Gå til innhold

Problem med nybyrjarprogram som behandler tal.


Anbefalte innlegg

Hei!

Eg har lest litt i ei bok eg lånte på biblioteket. Eg trudde det skulle virke, men neinei...

 

Programmet skal kunne gjere to ting med to brukarinput.

 

1. Du tastar inn eit tal.

2. Du vel om du vil finne kvadrattalet (kv) eller kubikktalet (ku).

3. Om du har tasta inn "kv", får du opp kvadrattalet til det du tasta inn på 1. (tal*tal). Om du har tasta inn "ku", får du opp kubikktalet til det du tasta inn på 1. (tal*tal*tal).

 

Dette er berre eit øvingsprogram, men det er jo kjekt å lage litt program utanom dei som er ferdig skrivne ned iboka!

Uansett, nok bull, her er koden:

import javax.swing.JOptionPane;
class finnKubikktal {
public static void main(String[] args) {
 Double number = JOptionPane.showInputDialog("Tast inn talet du vil finne meir informasjon om:");
 String type = JOptionPane.showInputDialog("Vil du finne kvadrattalet (kv) eller kubikktalet (ku)?");
 
 String varType = string.parseString(type);
 int kufinal = number * number * number;
 int kvfinal = varNumber * varNumber;
 if (varType == "ku") {
 JOptionPane.showMessageDialog(null, "Kubikktalet til " + number + " er " + kufinale + " .");
 }
 if (varType == "kv") {
 JOptionPane.showMessageDialog(null, "Kvadrattalet til "+ number + " er " + kvfinale + " .");
 }
 else {
 JOptionPane.showMessageDialog(null, "Du har skrive inn ein ugyldig verdi!");
 }
 System.exit(0);
}
}	

 

Eg veit det er rotete å sjå gjennom, eg har god orden i kjeldekoda mi, men det vert rotete å sjå på når eg limar inn i tekstboksen.

 

Her er feilmeldingane som eg får:

 

kvku.java:4: incompatible types

found  : java.lang.String

required: java.lang.Double

                Double number = JOptionPane.showInputDialog("Tast inn talet du v

il finne meir informasjon om:");

                                                          ^

kvku.java:7: cannot find symbol

symbol  : variable string

location: class finnKubikktal

                String varType = string.parseString(type);

                                ^

kvku.java:8: possible loss of precision

found  : double

required: int

                int kufinal = number * number * number;

                                              ^

kvku.java:9: cannot find symbol

symbol  : variable varNumber

location: class finnKubikktal

                int kvfinal = varNumber * varNumber;

                              ^

kvku.java:9: cannot find symbol

symbol  : variable varNumber

location: class finnKubikktal

                int kvfinal = varNumber * varNumber;

                                          ^

kvku.java:11: cannot find symbol

symbol  : variable kufinale

location: class finnKubikktal

                JOptionPane.showMessageDialog(null, "Kubikktalet til " + number

+ " er " + kufinale + " .");

 

          ^

kvku.java:14: cannot find symbol

symbol  : variable kvfinale

location: class finnKubikktal

                JOptionPane.showMessageDialog(null, "Kvadrattalet til "+ number

+ " er " + kvfinale + " .");

 

          ^

7 errors

 

Ha ein fortsatt god sundag! :)

Lenke til kommentar
Videoannonse
Annonse

Er ikke noen ekspert i java, men noe jeg hvertfall ser er at du prøver å gjøre om en double til en int. Du skriver først "double number = ..." for så å skrive "int kufinal = number*number *number". Bytt ut int med double hvertfall. Dessuten kan jeg ikke se at du deklarerer variabelen varNumber.

 

Edit: Dette bør funke. Hvis det er noen av forandringene du lurer på, er det bare å spørre.

 

 

import javax.swing.JOptionPane;

 

class finnKubikktal {

public static void main(String[] args) {

String numberstr = JOptionPane.showInputDialog("Tast inn talet du vil finne meir informasjon om:");

String type = JOptionPane.showInputDialog("Vil du finne kvadrattalet (kv) eller kubikktalet (ku)?");

 

double number = Double.parseDouble(numberstr);

double kufinal = number * number * number;

double kvfinal = number * number;

if (type.equals("ku")) {

JOptionPane.showMessageDialog(null, "Kubikktalet til " + number

+ " er " + kufinal + " .");

}

if (type.equals("kv")) {

JOptionPane.showMessageDialog(null, "Kvadrattalet til " + number

+ " er " + kvfinal + " .");

} else {

JOptionPane.showMessageDialog(null,

"Du har skrive inn ein ugyldig verdi!");

}

System.exit(0);

}

}

Endret av Josten
Lenke til kommentar

Måtte prøve meg på den selv også. Gjorde det litt annerledes, men jeg ville heller testet på tall (f.eks velg 1 eller 2) enn kv eller ku.

 

btw, hvordan får man koden i "dropdown" vindu?

 

import javax.swing.JOptionPane; // importerer hele pakka, alle funksjonene i den.

class finnKubikktal {

public static void main(String[] args) {

String Lest_tall = JOptionPane.showInputDialog("Tast inn talet du vil finne meir informasjon om:");

// Gjør strengen om til heltall
double Tall = Double.parseDouble(Lest_tall);

String type = JOptionPane.showInputDialog ("Vil du finne verdien til tallet i et kvadrat (kv)," +
"/n" + "eller verdien til tallet i et kubikk (ku)?");


double Kubikk = Tall * Tall * Tall;
double Kvadrat = Tall * Tall;

if (type.equals("ku")) {

JOptionPane.showMessageDialog(null, "Kubikktalet til " + Tall + " er " + Kubikk + " .");
}

if (type.equals("kv")) {
JOptionPane.showMessageDialog(null, "Kvadrattalet til "+ Tall + " er " + Kvadrat + " .");
}

else {
JOptionPane.showMessageDialog(null, "Du har skrive inn ein ugyldig verdi!");
}

System.exit(0);
}
}

Lenke til kommentar

Oki, takk, skal teste det! :)

 

Forresten, eg har programmert ein del PHP før, og der har eg alltid brukt == i if. Kvifor brukar de xxx.equal("xx")?

 

Er det mange andre store forskjelar frå PHP og JAVA? Forskjelen med (stor) støtte for OOP er eg klar over. Støtta for det i PHP5 var ikkje så bra. (og endå minde i v. 4).

Lenke til kommentar

Tusen takk skal de ha!

Eg brukte min beste ven, Google, til å finne ut litt om else if, slik at eg ikkje får den feilmeldingen om eg tastar inn "ku".

 

Har lært ganske mykje av dette, men eg lurer på ein ting til. Om eg vil vise programma mine til vener (som ikkje kan så mykje om datamaskiner), fins det ein anna måte å kjøre dette programmet på enn å gå inn i CMD og endre directory til den bestemte mappa og skrive "java *klasse*"?

Som ein fil ein berre kan dobbeltklikke på, eller noko slikt?

Lenke til kommentar

Eg lagde ein kalkulator:

Kjelde

Maskinkode

 

Han ser ut til å funke greitt. Kunne ønske meg knappar i staden for å måtte skrive inn p/m/d/g, men det lærar eg sikkert seinare. Les forresten ei bok som heiter Programmering i java, men eg har lånt han på biblioteket. Om eg klarar dette med java, kjem eg nok heilt sikkert til å kjøpe ei bok om emnet. Har lånt denne boka litt for lenge av biblioteket.

 

Har vurdert "Rett på java". Nokon som har innvendingar?

 

Har nokon forslag til andre øvingsprogram eg kan lage? Dette var jo ganske kjekt! :)

Lenke til kommentar

Gjorde et par endringer, så nå virker det 100%.

 

 

import javax.swing.JOptionPane; // importerer hele pakka, alle funksjonene i den.

class finnKubikktal {

public static void main(String[] args) {


String Lest_tall = JOptionPane.showInputDialog("Tast inn talet du vil finne meir informasjon om:");

// Gjør strengen om til heltall
double Tall = Double.parseDouble(Lest_tall);


String type = JOptionPane.showInputDialog ("Vil du finne verdien til tallet i et kvadrat (kv)," +
"\n" + "eller verdien til tallet i et kubikk (ku)?");


double Kubikk = Tall * Tall * Tall;
double Kvadrat = Tall * Tall;


if (type.equals("ku")) {


JOptionPane.showMessageDialog(null, "Kubikktalet til " + Tall + " er " + Kubikk + " .");
}

else if (type.equals("kv")) {
JOptionPane.showMessageDialog(null, "Kvadrattalet til "+ Tall + " er " + Kvadrat + " .");
}

else  {
JOptionPane.showMessageDialog(null, "Du har skrive inn ein ugyldig verdi!");
}


System.exit(0);
}
}

 

Sender deg en PM Arne.

 

Ikke gal den kalkulatoren :thumbup:

Endret av JFrame
Lenke til kommentar

import javax.swing.JOptionPane;
class ukalkulator {
public static void main(String[] args) {
boolean cont = true;
double soFar = 0;

 while (cont == true) {

 	String readNumber = JOptionPane.showInputDialog("Kva tal vil du velje?");
 	double number = Double.parseDouble(readNumber);

 	soFar = soFar + number;

 	while (cont == true) {
 	String operation = JOptionPane.showInputDialog("Kva vil du gjere med " + soFar + " ? \n D = Dele, G = Gange, P = Plusse, M = Trekke i frå og E = avslutte");
 	if (operation.equals("G")) {

   String operande = JOptionPane.showInputDialog("Kva vil du gange " + soFar + " med?");
   number = Double.parseDouble(operande);
   soFar = soFar * number;
   }

 	else if (operation.equals("D")) {
   String operande = JOptionPane.showInputDialog("Kva vil du dele " + soFar + " på?");
   number = Double.parseDouble(operande);
   soFar = soFar / number;
   }

 	else if (operation.equals("M")) {
   String operande = JOptionPane.showInputDialog("Kva vil du trekkje frå " + soFar + " ?");
   number = Double.parseDouble(operande);
   soFar = soFar - number;


   }

 	else if (operation.equals("P")) {
   String operande = JOptionPane.showInputDialog("Kva vil du plusse " + soFar + " med?");
   number = Double.parseDouble(operande);
   soFar = soFar + number;


   }

 	else if (operation.equals("E")) {
   cont = false;
   }
 	}
 }
 JOptionPane.showMessageDialog(null, "Du er ferdig med kalkulasjonane, og resultatet vart " + soFar + " !");
}
}

Lenke til kommentar
På tall, booleans og en del andre, brukes ==, slik som if(tall == 5). Men på String må man bruke xxx.equals("xx"). Akkurat hvorfor det er slik vet jeg ikke.

8181919[/snapback]

Objekter bruker man .equals() på. Dette fordi to erlikhets-tegn mellom to objekter kun sjekker minneadressen til de to objektene (om jeg ikke tar helt feil). Mao: dobbelt erlikhetstegn sjekker ikke innholdet i objektene, derfor equals()-metoden.

 

man kan bruke to erlikhetstegn på følgene (jeg har sikkert glemt noe):

int, long, double, boolean, enum, char osv...

 

btw, hvordan får man koden i "dropdown" vindu?

8181643[/snapback]

"Dropdown-liste" fikser man vha [ skjul ]-taggen:
[skjul]dette er skjult tekst[/skjul]

Lenke til kommentar
På tall, booleans og en del andre, brukes ==, slik som if(tall == 5). Men på String må man bruke xxx.equals("xx"). Akkurat hvorfor det er slik vet jeg ikke.

8181919[/snapback]

Objekter bruker man .equals() på. Dette fordi to erlikhets-tegn mellom to objekter kun sjekker minneadressen til de to objektene (om jeg ikke tar helt feil). Mao: dobbelt erlikhetstegn sjekker ikke innholdet i objektene, derfor equals()-metoden.

 

Og som alle sikkert skjønte er ikke String en primitiv datatype, men en klasse som skal gjøre det enklere å håndere mere en en char, i andre språk (c og henholdsvis c++) er string's alltid bare array's av chars (ikke STL inkl.)

Lenke til kommentar
På tall, booleans og en del andre, brukes ==, slik som if(tall == 5). Men på String må man bruke xxx.equals("xx"). Akkurat hvorfor det er slik vet jeg ikke.

8181919[/snapback]

 

== Sammenligner bare verdier - equals sammenlikner objekter. String er objekt.. :)

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...