Gå til innhold

Hvorfor vil ikke programmet kompileres?


Anbefalte innlegg

Har enda et problem her...merkelig :)

 

Skal lage et program som skriver ut pris eks.mva, mva og pris inkl. mva.

 

Jeg har følgende kode:

 

import  java.text.DecimalFormat;     // Hjelpeprogram for formatering
import javax.swing.JOptionPane;      // Hjelpeprogram for innlesing og utskriving
public class Pris
{
   public static void main(String[] args)
   {

       //Variabeldeklarasjon

      String inputPris_umva;
      float pris_umva;
      float mva;
      DecimalFormat   toDesimaler;

      double = toDesimaler;


      toDesimaler  =  new DecimalFormat(0.00);

      //Utfører beregninger

      mva = (pris_umva*0.75);


      inputPris_umva = JOptionPane.showInputDialog("Skriv inn prisen u/mva");

      pris_umva = Float.parseFloat( inputPris_umva );


      System.out.println("Pris eks. mva = " + toDesimaler.format(pris_umva) + "kr");
      System.out.print("Mva = " + (mva) + "kr");
      System.out.println("Pris inkl. mva = " + toDesimaler.format(pris_umva + mva) + "kr");




       //Avslutter program

       System.exit(0);

   }//end metode main()
}//end klasse Pris

 

Jeg får en slik feilmelding:

 

...not a statement double = toDesimaler;

^ (med hake under "d" i double)

 

expected double = toDesimaler;

^ (med hake mellom double og tilordningstegnet)

 

Noen som vet hva som er galt?

Lenke til kommentar
Videoannonse
Annonse

Da jeg luker bort denne linja kommer det opp to andre feilmeldinger:

 

Cannot find symbol

Symbol : constructor DecimalFormat(double)

loacation : class java.text.DesimalFormat

toDesimaler = new DecimalFormat (0.00);

^ (hake under "n" i new)

 

Possible loss of precision

found : double

rquired : float

mva = (pris_umva * 0.75);

^ (hake under multiplikasjonstegnet)

 

Hva er galt?

Lenke til kommentar

Vel, den siste først.

 

Du instansierer mva før pris_umva er instansiert. En variabel som skal brukes må ha en verdi. Så i det tilfellet her må pris_umva få en verdi før du kan gi mva en verdi (basert på pris_uma). Derfor må du flytte den linja til etter der hvor pris_umva får sin verdi.

 

pris_umva = Float.parseFloat( inputPris_umva );

mva = (pris_umva*0.75);

 

 

Kommer tilbake til decimalFormat om litt.. :)

Lenke til kommentar

Er i ferd med å lage samme pogram, men innlesing skal skje gjennom dos-vindu. Får 1 error når jeg skal kompilere. Kanskje du kan hjelpe?

 

import  java.text.DecimalFormat;     // Hjelpeprogram for formatering
import java.io.*;    // Hjelpeprogram for innlesing fra DOS-vindu


public class Prisdos
{
   public static void main(String[] args)
   {

       //Variabeldeklarasjon

      String inputPris_umva;
      float pris_umva;
      float mva;
      DecimalFormat   toDesimaler;
      InputStreamReader  inputStrom;    // objektholder for strømningsobjekt
   BufferedReader    	bufferLeser;  	// objektholder for lesingsobjekt



      toDesimaler  =  new DecimalFormat("0.00");
      inputStrom  = new InputStreamReader(System.in);
   bufferLeser  = new BufferedReader(inputStrom);


      //Innlesing av verdi

      System.out.print("Skriv inn pris eks. mva (desimaltall): ");  //Skriv ledetekst
   inputPris_umva = bufferLeser.readLine(); //Les teksttall


      pris_umva = Float.parseFloat( inputPris_umva );


      mva = (float) (pris_umva * 1.25) - pris_umva;


      System.out.println("Pris eks. mva = " + toDesimaler.format(pris_umva) + "kr");
      System.out.print("Mva = " + (mva)+"0" + "kr" + "\n");
      System.out.println("Pris inkl. mva = " + toDesimaler.format(pris_umva + mva) + "kr");




       //Avslutter program

       System.exit(0);

   }//end metode main()
}//end klasse Prisdos

 

Feilmeldingen lyder:

 

...unreported exception java.io.IOException must be caught or declared to be thrown

inputPris_umva = bufferLeser.readLine(); //Les teksttall

^ (hake under venstrestil parentes)

Lenke til kommentar

Try og Catch er noe som det bare er å bli kjent med først som sist, veldig greie å bruke når man skal skrive ut forståelige feilmeldinger istedet for de kryptiske feilmeldingene til java.

 

Husk at "vanlige folk" ikke fatter døyten av java -feilmeldinger.

 

try {

moo = "foo";

} catch (Exception e) {

System.out.print("Fooingen av mooen feilet!");

}

Lenke til kommentar

Er i ferd med å lage samme program som før, men innlesing og UTLESING skal skje ved hjelp av JOptionPane-pakken.

Jeg har følgende kode:

 

import  java.text.DecimalFormat;     // Hjelpeprogram for formatering
import javax.swing.JOptionPane;      // Hjelpeprogram for innlesing og utskriving
public class Prisdialog
{
   public static void main(String[] args)
   {

       //Variabeldeklarasjon

      String inputPris_umva;
      float pris_umva;
      float mva;
      DecimalFormat   toDesimaler;
      String utStreng;



      toDesimaler  =  new DecimalFormat("0.00");

      //Innlesing av verdi

      inputPris_umva = JOptionPane.showInputDialog("Skriv inn prisen u/mva");

      pris_umva = Float.parseFloat( inputPris_umva );


      mva = (float) (pris_umva * 1.25) - pris_umva;

      utStreng = utStreng + "Pris eks. mva" = toDesimaler.format(pris_umva) + "kr" + "\n";
   utStreng = utStreng + "Mva" = (mva)+ "kr";
   utStreng = utStreng + "Pris inkl. mva" = toDesimaler.format(pris_umva + mva) + "kr";




JOptionPane.showMessageDialog(null,utStreng,
"Resultat",JOptionPane.PLAIN_MESSAGE );




     //Avslutter program

       System.exit(0);

   }//end metode main()
}//end klasse Prisdialog

 

Får ikke kompilert. Hva er feil?

 

Problemene ligger her btw:

 

utStreng = utStreng + "Pris eks. mva" = toDesimaler.format(pris_umva) + "kr" + "\n";
   utStreng = utStreng + "Mva" = (mva)+ "kr";
   utStreng = utStreng + "Pris inkl. mva" = toDesimaler.format(pris_umva + mva) + "kr";

Endret av apwr
Lenke til kommentar

Vel, for det første har du skrevet disse utStrengene dine med feil syntaks. = skal på innsiden av "" og så skal det en + på høyre siden av " igjen når det skal tilføyes mere tekst.

 

utStreng = utStreng + "Mva =" + (mva) + "kr";

 

Du kan heller ikke bruke utStreng etter = tegnet i den første linjen. Den er ikke instansiert som vi har vært borti før. Nå fyller du opp utStreng for første gang og da kan du ikke bruke variabelen selv. Men her kan du kutte den helt ut (bare i den første linjen). Etterhvert kan det kanskje se sånn her ut:

 

utStreng = "Pris eks. mva =" + toDesimaler.format(pris_umva) + "kr" + "\n";
  utStreng = utStreng + "Mva =" + (mva)+ "kr";
  utStreng = utStreng + "Pris inkl. mva =" + toDesimaler.format(pris_umva + mva) + "kr";

 

Du kunne og fylt utStreng med en tom linje før du begynner å stappe den med tekst hvor du bruker variabelen selv til stappingen. Det er gunstig når du begynner med løkker.

 

utStreng = "";
utStreng = utStreng + "Pris eks. mva =" + toDesimaler.format(pris_umva) + "kr" + "\n";
  utStreng = utStreng + "Mva =" + (mva)+ "kr";
  utStreng = utStreng + "Pris inkl. mva =" + toDesimaler.format(pris_umva + mva) + "kr";

 

Begynner du å forstå opplegget med instansiering nå? Kan godt forklare det litt mer utdypende..

Endret av sluggr
Lenke til kommentar

Jo, når du lager deg en variabel av en bestemt type (deklarerer), f.eks String utStreng; får du en variabel som heter utStreng som er av typen String. Denne inneholder i utgangspunktet ingenting, ikke 0 eller en tom streng ("").. ingenting. Du kan da ikke benytte denne variabelen i noen oppgaver før du har gitt den noen som helst verdi, f.eks at den skal være en tom streng (utStreng = "";) eller et ord eller hva som helst ("utStreng = "startenpåstrengen"). Først når du har gjort dette kan du bruke variabelen i andre oppgaver, som å instansiere en annen variabel, f.eks String utStreng2 = utStreng;

 

Det du prøvde på var å fylle opp utStreng med det som lå i utStreng fra før... hvilket var ingenting, og java kan ikke bruke fylle opp en streng med ingenting.

 

Saken er at det virker logisk å kunne bruke en variabel som består av ingenting fordi at den da ikke burde tilføye noenting, men i java er det forskjell på ingenting og en tom streng.

 

Håper det forklarer det litt bedre.

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