Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  24 3628
Er rimelig ny med java, arbeider litt med det for å bli bedre. I denne anledning har jeg et par spørsmål:

Jeg får programmet til å kompilere, men det fungerer ikke slik jeg ønsker.
Jeg vil at programmet skal skrive inn pris uten moms, momssats og deretter skrive ut summen inkl moms i console. No gjør den bare de to førstnevnte. Hva har jeg gjort gale?

Jeg ønsker etter hvert også å lage error når det overstiger en moms verdi, hvordan kan jeg gjøre dette på en grei måte?

Kode:

Kode

class Moms {

 public static void main(String[] args) {

   // utgangspris og momsprosent.
   double prisUtenMoms = 750.00;
   int momssats = 25;

   // momssats som desimaltall
   double momsProsent = momssats/100; 
   // Regn ut moms
   double moms = prisUtenMoms * momsProsent; 

   // ut resultat
      System.out.println("Pris uten moms: " + prisUtenMoms + " kr, momssats: " + momssats + "%, moms: " + moms +" kroner");

 
}
}
takker for hjelp.
Sist endret av Spelly; 25. august 2010 kl. 21:27.
Problemet er at du deler en int (momssats) med en annen int (tallet 100). Dette fører til integerdivisjon, som kutter ut alt etter desimalpunktet. Så 25/100 = 0.25 -> 0. Skriv 100f eller 100.0 i stedet, da skal det funke.
Sitat av spelley Vis innlegg
Jeg ønsker etter hvert også å lage error når det overstiger en moms verdi, hvordan kan jeg gjøre dette på en grei måte?
Vis hele sitatet...

Kode

if (moms >= 200) {
  System.out.println("Litt mye moms: " + moms + " kronor");
} else {
  System.out.println("Pris uten moms: " + prisUtenMoms + " kr, momssats: " + momssats + "%, moms: " + moms + " kroner");
}
Noe slikt du tenkte på?

http://download.oracle.com/javase/tu...dbolts/if.html

Kode

	double momsProsent = (double) momssats / 100;
Lykke til.
Hijack: Hvis OP skriver

Kode

double momsProsent = (double) momssats / 100.0;
, gir det forskjellig print enn

Kode

double momsProsent = (double) momssats / 100.00;
excubated: WTF er det du prater om? 100.0 == 100.00 == 100f. Verdien av en variabel har ingenting med hvordan den printes ut å gjøre.
Sist endret av ymgve; 26. august 2010 kl. 09:17.
Sitat av ymgve Vis innlegg
excubated: WTF er det du prater om? 100.0 == 100.00 == 100f. Verdien av en variabel har ingenting med hvordan den printes ut å gjøre.
Vis hele sitatet...
Tenkte det var forskjell på antall desimaler eller noe
Du skal ikke tenke, du skal vite når du påstår slike ting.
Sitat av ymgve Vis innlegg
Du skal ikke tenke, du skal vite når du påstår slike ting.
Vis hele sitatet...
Haha, sorry :c Glemte spørsmålstegn
Jeg gjetter på at du går på informatikk på uib? :P
øvingsopg1.

funker og bare gjøre momssats om til double med en gang. er vel ikke vits å bruke int.
z0p
uʍop ǝpısdn
z0p's Avatar
Se også på locale og printFormat

Kode

Locale locale = Locale.no_NO;
new PrintfFormat(locale,"%'2f").sprintf( Double( 750 * (25/100)  ) );
Hvor kommer locale fra?

Og printformat for en saks skyld?
Dette er jo et eksempel på nybegynner-java, lite vits å dra inn PrintFormat da, mener jeg.
z0p
uʍop ǝpısdn
z0p's Avatar
Hmm, jeg vet ikke helt hvordan dette skjedde Ble noe rot. Var kun ment som et tips til videreutvikling som har litt med lokalisjon (valutta, desimaltall) og formattering av dette. Dog har noe gått litt fort i svingene, enten så tenkte jeg lengre frem enn jeg faktisk gjorde eller så er noe FUBAR. Dokumentasjonsreferanser var i grunn tenkt å være med f.eks
Innestengt
Spelly's Avatar
Trådstarter
Takker for hjelp. Var ikke noe problem å få det til etter litt drahjelp fra de første postene.
Siden det fort baller på seg med ulike spørsmål relatert til java, velger jeg å bruke denne posten til et par spørsmål til.

Holder på å lage et program som skal regne ut distansen til en gjenstand som har falt x antall sekund. Jeg har formelen, er bare en liten ting jeg lurer på.
Jeg har variabelen: double distanse = (9.81*tid)/2.0;, hvordan opphøyer (^) jeg tid i 2?
2. Når jeg skriver inn verdi i input, kan jeg ikke bruke komma (f.eks t= (5.5)s, uten at det kommer error, why?
Sist endret av Spelly; 1. september 2010 kl. 20:05.
Sitat av spelley Vis innlegg
Takker for hjelp. Var ikke noe problem å få det til etter litt drahjelp fra de første postene.
Siden det fort baller på seg med ulike spørsmål relatert til java, velger jeg å bruke denne posten til et par spørsmål til.

Holder på å lage et program som skal regne ut distansen til en gjenstand som har falt x antall sekund. Jeg har formelen, er bare en liten ting jeg lurer på.
Jeg har variabelen: double distanse = (9.81*tid)/2.0;, hvordan opphøyer (^) jeg tid i 2?
2. Når jeg skriver inn verdi i input, kan jeg ikke bruke komma (f.eks t= (5.5)s, uten at det kommer error, why?
Vis hele sitatet...
tid*tid vel?
Sist endret av VivaLatrina; 1. september 2010 kl. 20:15.
Innestengt
Spelly's Avatar
Trådstarter
Sitat av VivaLatrina Vis innlegg
tid*tid vel?
Vis hele sitatet...
Har prøvd det, programmet vil kompilere, men etter jeg har skrevet inn en verdi i input kommer det ikke ut ny verdi i output, bare > .
Javadoc to the rescue!

http://download.oracle.com/javase/1....ble,%20double)

Jeg prøver igjen..

Spørsmål 1 - opphøye et tall:
http://download.oracle.com/javase/1....ble,%20double)

Spørsmål 2 - feil ved innlesing av double fra terminalen:
Du får sikkert et InputMismatchException. Dette er fordi du mest sannsynlig benytter punktum som separator for desimaltallene. Dette fungerer ikke fordi din locale er mest sannsynlig satt til "NO", altså Norge. I Norge benytter vi, som du sikkert er klar over, komma istedenfor punktum. Ref: http://download-llnw.oracle.com/java...ml#nextDouble()

Du kan teste dette med denne koden:

Kode

Scanner input = new Scanner(System.in);
System.out.println(DecimalFormatSymbols.getInstance(input.locale()).getDecimalSeparator());
Dette vil gi ",". Du kan endre Scanneren sin locale til f.eks. "US" hvor punktum benyttes.

Kode

Scanner input = new Scanner(System.in);
input.useLocale(Locale.US);
Sist endret av John B; 1. september 2010 kl. 22:26.
Innestengt
Spelly's Avatar
Trådstarter
Takker for hjelp. Svar på spørsmål 2 var mye til hjelp! Ang opphøying av tall, løste jeg dette ved å bruke: Math.pow (tid, 2).
Hvordan kan jeg avgrense svarene som kommer i output til 1 desimal? f.eks 10.1meter?

Og hvorfor blir 4/7.0-4/7 = 0.5714285714285714 når jeg kjører det?
Sist endret av Spelly; 2. september 2010 kl. 00:27.
Sitat av spelley Vis innlegg
Hvordan kan jeg avgrense svarene som kommer i output til 1 desimal? f.eks 10.1meter?
Vis hele sitatet...
Sjekk her: http://www.iu.hio.no/~kjetilg/uvstof...p4.html#format

Kode

#python
>>> x = 4/7.0 - 4/7
>>> x
0.5714285714285714
>>> type(x)
<type 'float'>
>>> print 'Give me a 2 decimal number %.2f' % x
Give me a 2 decimal number 0.57
I java use printf støttet fra java 1.5-->

Kode

public class DecimalPlaces {
  
    public static void main(String[] args) {        
        double d = 4/7.0 - 4/7;
        System.out.printf("%.2f", d);
    }
}
//--> 0,57
Decimalformatl DecimalFormat("#.###") vil avrunde av til 3 decimaler.

Kode

import java.text.*;

public class DecimalPlaces_1 {  
    public static void main(String[] args) {        
        double d = 4/7.0 - 4/7;
        DecimalFormat df = new DecimalFormat("#.##");
        System.out.print(df.format(d));
    }
}
//--> 0,57
Sist endret av snippsat; 2. september 2010 kl. 07:47.
Innestengt
Spelly's Avatar
Trådstarter
Takker for hjelp, %.1f funket perfekt for å redusere antall desimal i op.

No har jeg støtt på et annet problem når jeg skal gjøre omvendt regneoperasjon. Altså distansevedi i meter etter gitt sekund.

Siden jeg må ha kvadratroten av de ulike verdiene bruker jeg følgende formel:
double tid2 = System.out.println(Math.sqrt(2*distanse2/9,81));

når jeg kompilerer og kjører programmet får jeg følgende feilmelding:
sqrt(double) in java.lang.Math cannot be applied to (double,int)

Hva kan jeg gjøre for å løse dette problemet ?

Koden ser forøvrig slik ut:

Kode

 
import java.util.Scanner;  // <- metode for å konvertere bytes til primitive verdier.
public class Distanse_versjon2 {
public static void main(String[] args) {
  
  Scanner tastatur = new Scanner(System.in);
  //skriver ut
  System.out.println("Angi tid i sekunder: ");

  //leser tastaturet
  double tid = tastatur.nextDouble();
  
  //Gjør regneoperasjoner. Math.pow, opphøyer verdien i tid i 2 (tid^2)
  double distanse = (9.81* Math.pow(tid,2)/2.0);
 
 //skriver ut resultat 
System.out.printf(" Distansen i meter etter " + tid + " sekunder i fritt fall er %.1f", distanse ); 

System.out.println("Angi distanse i meter:");
  double distanse2 = tastatur.nextDouble();

 double tid2 = System.out.println(Math.sqrt(2*distanse2/9,81));

              System.out.println ("distanse i meter:" + distanse2 + " meter ");
               System.out.println ("tiden i fritt fall er:" + tid2 + " sekunder");
   }
}
Jeg kan dele min kildekode, den funket forsåvidt greit når jeg compilet også, så mulig den kan hjelpe deg. ( les under koden )

Kode

import java.util.Scanner;
import java.lang.Math; 

/**
 * 
 * @author Kristoffer
 * Ovingsoppgave 2
 * Programmets hensikt er å først regne ut en distanse ut i fra tid oppgitt fra brukeren. 
 * Deretter blir brukeren spurt om en ny verdi, tid, som programmet bruker til å regne ut distansen som legemet har tilbakelagt
 * 
 */

 
class kalkulator {
  public static void main(String[] args) {
      final double g = 9.81;
      double tid;
      double distanse;

  Scanner tastatur = new Scanner(System.in);
  // Leser brukerens input på tid, og regner ut distanse ut i fra en gitt formel
  System.out.print("Angi tid i sekunder[Flyttall]: ");
  tid = tastatur.nextDouble();
  distanse = (g * tid * tid)/2;
  System.out.printf("Distanse etter %.1f sekunder i fritt fall er %.1f meter ", tid, distanse);
  System.out.println();
  // Leser brukerens input på distanse, og regner ut tid ut i fra en gitt formel
  System.out.print("Angi distanse i meter[Flyttall]: ");
  double distanse2 = tastatur.nextDouble();
  double tid2 = Math.sqrt((2*distanse2)/g);
  System.out.printf("Tiden i fritt fall: %.1f sekunder", tid2);
 
  }
}
Under forelesningen la jeg merke til at han burkte denne setningen helt øverst;
import java.lang.Math
det er obvious hva den gjør, det er mulig du må ha med den siden du bruker en Math.x metode liksom, jeg tok den i hvertfall med og det var win.

Ser forresten at du har brukt 9.81 i utrykkene; oppgaven vi fikk ba spesifikt om å definere dette som en konstant variable, så for max poeng tror jeg du kansje bør bruke

Kode

final double g = 9.81
Sist endret av blueshift; 2. september 2010 kl. 13:14.

Kode

import java.util.Scanner;  // <- metode for å konvertere bytes til primitive verdier.

public class Distanse_versjon2 {

	public static void main(String[] args) {

	  Scanner tastatur = new Scanner(System.in);
	  //skriver ut
	  System.out.println("Angi tid i sekunder: ");

	  //leser tastaturet
	  double tid = tastatur.nextDouble();

	  //Gjør regneoperasjoner. Math.pow, opphøyer verdien i tid i 2 (tid^2)
	  double distanse = (9.81* Math.pow(tid,2)/2.0);

	 //skriver ut resultat
      System.out.printf(" Distansen i meter etter " + tid + " sekunder i fritt fall er %.1f", distanse );

	  System.out.println("Angi distanse i meter:");
	  double distanse2 = tastatur.nextDouble();

	  double tall = 2*distanse2/9.81;
	  double tid2 = Math.sqrt(tall);
	  System.out.println(tid2);

	  System.out.println ("distanse i meter:" + distanse2 + " meter ");
	  System.out.println ("tiden i fritt fall er:" + tid2 + " sekunder");
	}
}
Her er hvordan jeg ville gjor det.
Husk java først regner ut gangetegn, så deletegn, så pluss og så minus. Får du store regnestykker framover vil jeg anbefale å pøse på med paranteser.
Tror feilen din var at du hadde komma på 9,81, altså du skrev 9,81 mens java vil at du skriver 9.81.. Det var det som skulle til hos meg i hvertfall.

Edit: hvilken skole går dere på?

Så nå at jeg var litt rask med utskriften der, men det ser du vel
UiB;
--> Datateknologi
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av spelley Vis innlegg
når jeg kompilerer og kjører programmet får jeg følgende feilmelding:
sqrt(double) in java.lang.Math cannot be applied to (double,int)
Vis hele sitatet...
Lære å lese feilmeldinger.

Og lære at nFF ikkje er et skoleforum for å hjelpe deg med leksene.