Rozwiązania

Rozwiązanie 1.7

W tym zadaniu zrobimy w końcu coś naprawdę przydatnego. Będzie to coś na kształt prostego kalkulatora dwóch liczb. Należało tutaj uważać na fakt, że standardowo metoda nextDouble() klasy Scanner wczytuje liczby z przecinkiem zamiast kropki jako separatorem.

import java.util.Scanner;

public class Odczyt{
  public static void main(String[] args){
	  double a;
	  double b;

	  Scanner odczyt = new Scanner(System.in);

	  System.out.println("Podaj pierwszą liczbę: ");
	  	a = odczyt.nextDouble();
	  System.out.println("Podaj drugą liczbę: ");
	  	b = odczyt.nextDouble();

	  System.out.println(a+"+"+b+"="+(a+b));
	  System.out.println(a+"-"+b+"="+(a-b));
	  System.out.println(a+"*"+b+"="+(a*b));
	  System.out.println(a+"/"+b+"="+(a/b));
  }
}

Podobnie jak w przykładzie z lekcji importujemy odpowiednią klasę, następnie tworzymy dwie zmienne typu double oraz obiekt Scanner.

Dalej prosimy użytkownika o podanie dwóch liczb i zapisujemy je do wcześniejszych zmiennych.

Na końcu wyświetlamy wyniki naszych działań.

Poćwicz i wykorzystaj inne metody klasy Scanner w innych przykładach.

Komentarze

Dodawanie komentarzy jest aktualnie wyłączone.

Kamil

Heh, po tym przykładzie widzę, że nie tylko znajomość pewnych komend/funkcji itp jest ważna, ale również odpowiednie myślenie przy pisaniu kodu. U mnie kod jest 3 razy dłuższy, a robi to samo! ;) import java.util.Scanner; public class Cw1_7{ public static void main(String[] args){ double pl; double dl; Scanner odczyt = new Scanner(System.in); System.out.println("Podaje pierwsza liczbe:"); pl = odczyt.nextDouble(); System.out.println("Podaj druga liczbe:"); dl = odczyt.nextDouble(); //dodawanie double dodawanie = pl + dl; System.out.println("Wynik dodawania:"); System.out.println(dodawanie); //odejmowanie double odejmowanie = pl - dl; System.out.println("Wynik odejmowania:"); System.out.println(odejmowanie); //mnozenie double mnozenie = pl * dl; System.out.println("Wynik mnozenia:"); System.out.println(mnozenie); //dzielenie double dzielenie = pl / dl; System.out.println("Wynik dzielenia:"); System.out.println(dzielenie); } }

Paweł

Myślałem, że w moim kodzie jest jakiś błąd, ale po skopiowaniu kodu z rozwiązania jest to samo: Podaj pierwszą liczbę: 1,1 Podaj drugą liczbę: 2,2 1.1+2.2=3.3000000000000003 1.1-2.2=-1.1 1.1*2.2=2.4200000000000004 1.1/2.2=0.5 1.1+2.2=3.3000000000000003 << dlaczego takie coś występuje?

Heniu

Witam, mam ten sam problem. Zna może ktoś przyczynę takich wyników?

Sławek Ludwiczak

Wynika to ze sposobu przechowywania wartości przez komputer. W systemie dwójkowym nie da się przedstawić niektórych liczb, można co najwyżej przedstawić ich bardzo dokładne przybliżenie - i to właśnie tutaj widać. Tutaj znajdziesz dokładniejszą odpowiedź na swój problem: http://javastart.pl/efektywne-programowanie/javatraps-004/

Kris

Dlaczego podane jest tutaj: http://firstclassthoughts.co.uk/java/traps/java_double_traps.html Rozwiązań jest sporo, ale wydaje mi się ze najlepszym jest: DecimalFormat df = new DecimalFormat("#########.###"); df.format(liczba).

Kris

albo ewentualnie coś takiego jeśli chcemy otrzymać liczbę: Double lalala = new Double(Math.round(glebokoscDo * 100.0) / 100.0);

Nitr0Skay

Dlaczego jak w konsoli podaję zmiennoprzecinkową z kropką zamiast przecinka to wywala błąd ?? Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Unknown Source) at java.util.Scanner.next(Unknown Source) at java.util.Scanner.nextDouble(Unknown Source) at Lekcja8.main(Lekcja8.java:10) Kiedy podaję z przecinkiem wszystko jest w porządku.

Robert

A mi wyskakuje błąd: resource leak: odczyt is never closed co to oznacza?

jaro

musisz zamknąć Scanner: odczyt.close();

kixub

Można też sczytać od razu dwie liczby bez proszenia o każdą z osobna, wtedy wystarczy podawać je po spacji. Mam rację? double a,b; Scanner x=new Scanner(System.in); System.out.println("Podaj dwie liczby: "); a=x.nextDouble(); b=x.nextDouble(); System.out.println(a*b+"\n"+a/b+"\n"+(a+b)+"\n"+(a-b));

Robert

W tym programie, w moim też nie działają liczby zmiennoprzecinkowe, trzeba wpisywać całkowite. Dlaczego? import java.util.Scanner; public class Konwersje3 { public static void main(String[]args){ double a, b; double suma; double różnica; double iloraz; double iloczyn; Scanner odczyt = new Scanner(System.in); System.out.println("Podaj a:"); a = odczyt.nextDouble(); System.out.println("Podaj b:"); b = odczyt.nextDouble(); suma = a+b; System.out.println("suma = "+suma); różnica = a-b; System.out.println("różnica = "+różnica); iloraz= a/b; System.out.println("iloraz = "+iloraz); iloczyn= a*b; System.out.println("iloczyn = "+iloczyn); } }

Dawid

Podawaj liczby z przecinkiem a nie z kropka