Kurs Java Podstawy - rozszerzony

Podstawowe wejście / wyjście

W naszych przykładach musieliśmy do tej pory wszystkie dane podawać bezpośrednio w kodzie programu. Nie jest to ani wygodne, ani użyteczne, bo przecież nawet najprostszy kalkulator musi mieć funkcję pobierania danych od użytkownika. Służą do tego strumienie wejścia i wyjścia, o których wspomnimy na tej lekcji.

Wyświetlanie danych

Mieliśmy już niejednokrotnie do czynienia z wyświetlaniem danych na ekranie. Używaliśmy w tym celu instrukcji System.out.print(dane); Można w ten sposób wyświetlić zarówno liczby, znaki jak i łańcuchy znaków. Niestety metoda ta nie daje nam zbyt wielkiego pola do popisu, nie mamy kontroli nad wyświetlanymi danymi i nad choćby formatowaniem ilości liczb po przecinku. W takim wypadku należy używać metody System.out.printf(). Nie będę się tutaj o niej rozpisywał, ponieważ praktycznie w każdym języku jej działanie jest identyczne i można o tym obszernie poczytać w sieci (no i my raczej na razie też nie będziemy jej używali w naszych przykładach).

Pobieranie danych od użytkownika

... czyli w końcu coś naprawdę użytecznego. Jest to  jedna z najważniejszych funkcjonalności jaką powinna dawać większość programów. Można w tym celu wykorzystać kilka mechanizmów na przykład Bufurowany odczyt danych, jednak zaczniemy od czegoś nieco prostszego. Do pobierania informacji służy strumień System.in. Jest z nim związana klasa Scanner, dzięki której napiszemy prosty program odbierający od użytkownika jego imię i wyświetlający powitanie.

import java.util.Scanner;

public class Witaj{
  public static void main(String[] args){
	  String imie; //w nim zapiszemy swoje imie
	  Scanner odczyt = new Scanner(System.in); //obiekt do odebrania danych od użytkownika

	  imie = odczyt.nextLine();

	  System.out.println("Witaj "+imie); //wyświetlamy powitanie
  }
}

Przede wszystkim najpierw w nagłówku importujemy odpowiednią klasę, czyli Scanner.

Najpierw deklarujemy zmienną imie, w której zapiszemy pobrane od użytkownika dane. Następnie tworzymy nowy obiekt typu Scanner. Mamy tutaj dwa etapy, deklaracja

Scanner odczyt;

oraz utworzenie obiektu, za pomocą operatora new:

odczyt = new Scanner(System.in);

My zapisaliśmy obie powyższe instrukcje w jednej linii. Jak widzisz tworzenie obiektu jest podobne do deklaracji i inicjacji typów prostych. Programowaniem obiektowym zajmiemy się jednak później.

Jako parametr konstruktora obiektu Scanner podaliśmy strumień wejścia System.in, dzięki czemu teraz będziemy mogli się komunikować z użytkownikiem.

imie = odczyt.nextLine();

W tym momencie następuje odebrania od użytkownika jednej linii znaków, czyli tekstu zakończonego klawiszem enter. Klasa Scanner oferuje również szereg innych metod do odczytu innych typów danych:

  • nextInt() - odczytuje kolejną liczbę całkowitą
  • nextDouble() - czyta kolejną liczbę zmiennoprzecinkową (uwaga, separatorem może być tutaj zarówno kropka jak i przecinek - wszystko zależy od standardu kraju na jaki ustawiona jest maszyna wirtualna - można to ustawić za pomocą metody useLocale(Locale))
  • itp. istnieje także szereg przydatnych funkcji, które mogą być użyteczne na przykład przy odczycie plików, możesz się z nimi zapoznać w API klasy Scanner.

Zadania do samodzielnego wykonania:

1.7 Utwórz dwie zmienne typu double. Następnie przy użyciu klasy Scanner pobierz od użytkownika dwie liczby i wykonaj na nich dodawanie, odejmowanie, mnożenie i dzielenie, wyświetlając wyniki w kolejnych liniach na konsoli.

Rozwiązanie.

<- Poprzednia LekcjaNastępna Lekcja ->

Komentarze

Zbychu

Witam

podczas próby kompilacji taki potwór ->
error: Class names, 'Witaj', are only accepted if annotation processing is explicitly requested

o co camone ??

Slawek

kompiluj przy użyciu javac Witaj.java
Nie zapominaj o rozszerzeniu .java. Uruchamia się bez rozszerzenia przez:
java Witaj

Fryko

Żeby miało ręce i nogi;)

import java.util.Scanner;
public class Witaj{
public static void main(String [] args){
System.out.println("Jak masz na imie?");
String imie;
Scanner odczyt = new Scanner(System.in);
imie = odczyt.nextLine();
System.out.println("Witaj " + imie);
}
}

Jan

Ale w javie to jest zagmatwane w c++ jest:
cin >> a;
W pascalu:
Read(a);
A tu takie pogmatwane ;(

Patryk

Mnie się zdaje, że nie jest zagmatwane, po prostu jest odgórna zasada, jeśli zabierzesz się za jave najpierw, wyda Ci się dziwny pascal i zapisywanie Read(cos);
więc zależy tylko jak na to spojrzymy ;)

Zbyszek

Może nie zagmatwane, ale rzeczywiście, w c++ cin >> a załatwia to co w Javie jest w trzech linijkach(!).

DDO

Bo to w najwiekszym uproszczeniu gotowa klasa ststyczna :-)

Utowrz klase ktora wykona ten kod i ustwa ja jako statyczna.

Patrycjusz

Witam,

Ja zapisałem to tak:

import java.util.Scanner;

public class Witaj{
public static void main(String[] args){
Scanner odczyt = new Scanner(System.in);
String imie = odczyt.nextLine();
System.out.println("Witaj "+imie);
}
}

Czy to nie robi żadnej różnicy, bo jeśli nie to tylko plik może ważyć ciut mniej :-), nie wiele ale zawsze...

xnikixx

nie robi to roznicy
po prostu tak sie pisze zeby kod byl bardziej czytelny ale jesli wolisz to moze byc tak

Witek

Witam
Ja napisałem kod trochę inaczej niż Sławek i Ty . Programy robią dokładnie to samo, ale są niewielkie różnice w kodzie. Kolega Sławek napisał tak, aby wszyscy wiedzieli co było zrobione po kolei. (moje gg: 6800421)

Mój kod tego programu:

import java.util.Scanner;

public class Witaj {

/**
* @author Witek
*/
public static void main(String[] args) {

String imie;
Scanner odczyt;

System.out.println("Podaj imie: ");

odczyt = new Scanner(System.in);
imie = odczyt.nextLine();

System.out.println("Witej " + imie);

}

}

Tomas

Witam. Mam mały problem z podawaniem imion do tablicy za pomocą scannera .
Do kompilacji używam programu NetBeans 7.0 a kod programu wygląda tak :
import java.util.Scanner;

public class program{
public static void main(String[]agrs){
String [] tablica = new String [5];
String imie;
for(int i=0;i>5;i++){
System.out.println("Podaj imię: ");
Scanner odczyt = new Scanner(System.in);
imie = odczyt.nextLine();
tablica[i]= imie;
}
for(String x : tablica)
System.out.println("Witaj: "+x);
}
}

Wynik działania programu wygląda następująco :
Witaj: null
Witaj: null
Witaj: null
Witaj: null
Witaj: null

Mógłby ktoś mi wytłumaczyć dlaczego nie mogę wprowadzić imion z klawiatury ?

Z góry dzięki za odp. pozdrawiam

Slawek

w pierwszej pętli for masz błędny warunek, ma być znak mniejszości, a nie większości.
Poza tym zmienną odczyt lepiej zadeklaruj przed ciałem pętli, powinno unikać się powielania obiektów, jeśli można do czegoś wykorzystać tylko jeden egzemplarz.

Tomas

Aj rzeczywiście głupi błąd w pierwszej pętli.
Dzięki wielkie za pomoc Sławku :)

Miradokus

W jakie sposób użyć metody useLocale(Locale)), tak aby w Zadaniu 1.7 nie występował błąd wyjątku, gdy wprowadzam liczby z użyciem "." - kropki?
Jakiś przykład byłby bardzo pomocny.

Slawek

import java.util.Locale;
import java.util.Scanner;

public class Test {
public static void main(String[] agrs) {

double liczba;
Scanner odczyt = new Scanner(System.in);
odczyt.useLocale(Locale.US);

System.out.println("Podaj liczbe: ");
liczba = odczyt.nextDouble();
System.out.println("Twoja liczba to: " + liczba);
}
}
snt.banzai

Mam pytanie jak będzie prezentował się poprawny zapis metody useLocale() bez odwoływania się do niej w nagłówku?

Kamiler65

Radzę wszystkim przepisać to 10 razy i zapamiętacie cały kod.

Kamiler65

import java.util.Scanner;
public class Skaner{
public static void main(String[] args){
System.out.println("Jak masz na imie?");
String imie;
Scanner odczyt=new Scanner(System.in);
imie=odczyt.nextLine();
System.out.println("Witaj " + imie );
System.out.println("Nie wiedziałem że można śie tak głupio nazywać.");
}
}

Witek

Witam
Mam mały dylemat odnośnie sposobu wprowadzania danych np.: z klawiatury. W tej książce „Java zadania z programowania z przykładowymi rozwiązaniami.” autor: Mirosław Kubiak i nie tylko, w celu czytania danych z klawiatury korzystają z klas InputStreamReader oraz BufferedReader. My natomiast korzystamy z klasy Scanner i tu mam dylemat w jakim przypadku mam skorzystać z klasy Scanner, a w jakim z tamtych dwóch klas. Szukałem w internecie, ale nic nie znalazłem odnośnie kiedy użyć jednej, albo drugiej opcji do wprowadzania danych. Może ktoś mi wytłumaczyć. Z góry dziękuję
Pozdrawiam Witek

Slawek

Klasa Scanner jest najprostszym z rozwiązań, natomiast BufferedReader dużo bardziej uniwersalnym. Jak sama nazwa wskazuje klasa BufferedReader tworzy także pewien bufor przy odczycie danych - sprawdzi się więc dużo lepiej przy odczycie dużych porcji danych, albo przy programach, które pobierają dane z neta. Generalnie pomimo tego, że Scanner jest bardziej rozbudowaną klasą, udostępnia więcej metod, to jednak BufferedReadera częściej się używa tyle, że trzeba dopisać odpowiednie metody dodające mu odpowiedniej funkcjonalności. Przy odczycie z klawiatury osobiście preferuję Scanner też głównie dlatego, że mogę za jego pomocą odczytywać różne dane Stringi, liczby bez konieczności ich późniejszego parsowania (nextInt, nextLine ...).

Witek

Dzięki.
Fajnie to wyjaśniłeś, takiej odpowiedzi szukałem. Teraz będę wiedział, której z klas użyć.
Pozdrawiam Witek

szeri

Świetny kurs. Mam w domu Thinking in Java, ale tutaj dużo szybciej uczę się przydatnych rzeczy. Swoją drogą również nie mogłem się połapać jak użyć useLocale, ale w końcu się udało. Dzięki za komentarze.

Arkadiusz

W API Javy jest bardzo fajny przykład wykorzystania klasy Scanner

String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();

Jędrzej

Chciałbym zauważyć iż można niczego nie importować lecz wpisywać nazwy pakietów przy tworzeniu. Przykład programu!

public class Scanner{
public static void main(String[] args){
java.util.Scanner S = new java.util.Scanner(System.in);
String SS = S.nextLine();
}
}

Slawek

słuszna uwaga, a nawet nie pomyślałem, żeby o tym napisać :)

Edzio94

Mam pytanie - Czy musimy tutaj robić obiekt odczyt klasy Scanner? Probowałem to zrobić bez robienia obiektu, lecz wtedy nie wyskakują mi wszystkie opcje i nie widzi mi np funkcji Nextline. Chodzi mi tutaj szczególnie o fakt, ze tworzymy obiekt dla klasy Scanner, a dla klasy Math (w poprzednim ćwiczeniu) już nie i chciałbym się dowiedzieć czemu tak jest? Czy zawsze musimy tworzyć obiekty? Czemu bez stworzenia obiektu wyskakują mi także niektóre funkcje, a niektóre nie? (Scanner.class.funkcje), lecz nie wszystkie?

g

no i wypadało by dodać, że program powinien być uruchamiany w konsoli/trybie tekstowym.
odpalenie go np w Eclipse nie daje żadnego efektu.

Marcin

u mnie wszystko działa w eclipse, więc nie wiem w czym problem.

DDO

daje efekt ale musisz wpisac w Eclipse masz okno Console tam wpisujesz tekst :-),

Bartek

W cmd mi działa ale w eclipse nie :(

Bartek

Kurde nie działa mi to skopiowałem kod nawet dla pewności wkleiłem do eclipsea i nie mogę podać imienia :(

poczatkujaca

Ja też na początku myślałam, że ten program nie działa mi w eclipse. Klikałam run eclipse chwile myślał i dalej nic się nie działo. Ale później zorientowałam się, że trzeba kliknąć na dole w zakładkę console i tam wpisywać imię :)

alfa

Witam, czy na końcu kodu nie trzeba czasem jeszcze dopisać odczyt.close(); , jeśli tego nie dopisze to program nie kończy się wykonywać

Michał

mi w cmd nie działa a w konsoli wyswietla mi że nie zna słowa "odczyt."
po prostu wyświetla go jako błąd
proszę o pomoc

mat

Description Resource Path Location Type
Resource leak: 'odczyt' is never closed

Killrog

Te tutoriale są naprawdę przyjazne laikom. Wiedza jest podawana w takich ilościach, że codziennie gdy siadam do nauki, widzę, że rzeczywiście poznaję coś nowego - to bardzo motywuje!

Anonim

czy będzie błędem odrazu:
string imie = odczyt.nextLine

Zamiast:
String imie
imie = odczyt.nextLine();

Tomek

Tam jest chyba blad, bynajmniej mi w blueJ sie zwiesza podczas kompilacji. Sam jestem totalnym zoltodziobem, ale dodalem jedna linijke, zeby podal to imie, bo z czego ma je zczytac jesli nie ma mozliwosci jego wprowadzenia:
System.out.println("Podaj swoje imie?");
imie = odczyt.nextLine();

Odmulator

"Resource leak: ‚odczyt’ is never closed"
Wystarczy zamknąć odczyt i błąd zniknie, wystarczy dodać na końcu linjke odczyt.close();

yamii

Hej wszystkim.
Sugeruję dodać linijkę "System.out.println("Podaj swoje imię: ");" do powyższego kodu. Nowi użytkownicy Eclipse mogą nie zorientować się, że należy wpisać swoje imię w pustą konsolę.

Grzegorz

Czy możliwe jest używanie kropki i przecinka jednoczesnie tzn.
w pierwszej zmiennej liczna z przecinkiem, a w drugiej liczby z kropką?
Jeśli tak, to jak?

Rafał Mikołajczuk

nie da się, jeśli chcesz używać float lub double to tylko 4.5 . Jeśli chcesz już koniecznie wyświetlić jakąś liczbę jako 4.5 lub 4,5 , to proponuje String :P

3DK

Mam mały problem. Przy każdym "if" wyskakuje mi taki błąd krytyczny "Incompatible operand types String and char". Nie potrafię tego pchnąć dalej.

kod wklejam na forum, bo jest za długi żeby go wrzucić tutaj

http://forum.javastart.pl/Thread-Podstawowe-wej%C5%9Bcie-wyj%C5%9Bcie

Nism0

Hej,

3DK - dzieje sie tak dlatego ze probujesz porownac znak ( czyli typ char) ze zmienna typu String. Piszac 'z' przesylasz znak, a piszac "z" przesylasz String. Diabel tkwi w szczegolach.



PS: przepraszam za brak polskich znakow diakrycznych ale pisze z telefonu ;)

Pozdrawiam

3DK

Ok dzięki za info, teraz troszkę to poprawiłem, ale nadal mam mały błąd.

Nism0

3DK - chętnie zobaczymy co nowego ci się zrodziło ;)

3DK

no zapomniałem napisać, że jest z edytowane na forum :P

http://forum.javastart.pl/Thread-Podstawowe-wej%C5%9Bcie-wyj%C5%9Bcie

Nism0

Z tego co widze, to tam nie ma bledu jako takiego, a jedynie drobnu warning , ktory mowi o tym ze zmienna wynik moze zostac uzyta jako niezainicjowana. Wez daj tam po prostu int wynik = 0; i powinno nyc ol ;)

3DK

Wygląda na to, że dział jak trzeba. Pytanie jeszcze tylko odnośnie "Resource leak: 'odczyt1' is never closed".
Czemu mi to wyskakuje? Zakładam że da się na pewno coś z tym zrobić, pytanie tylko jak?

P.S
Jak to jest, że inni mogą tu mega długie kody wklejać, i to normalnie jest wyświetlane?

Nism0



3DK:

Wygląda na to, że dział jak trzeba. Pytanie jeszcze tylko odnośnie „Resource leak: ‚odczyt1′ is never closed”.
Czemu mi to wyskakuje? Zakładam że da się na pewno coś z tym zrobić, pytanie tylko jak?
P.S
Jak to jest, że inni mogą tu mega długie kody wklejać, i to normalnie jest wyświetlane?


Ty też możesz, używając tagów
;)
Sławek Ludwiczak

właściwie to większość komentarzy z długim kodem jest usuwana. Komentarze powinny odnosić się do drobnych kwestii - jeśli pytanie jest związane z implementacją - pytamy na forum.

Nism0

Pytanie jeszcze tylko odnośnie „Resource leak: ‚odczyt1′ is never closed”.
Czemu mi to wyskakuje? Zakładam że da się na pewno coś z tym zrobić, pytanie tylko jak?


A jakiego IDE używasz ? Ja korzystam z Eclipse i u mnie nie widać nic szczerze mówiąc, program działa OK.

Natomiast, mała uwaga :

if("+".equals(c)){
wynik=liczba1+liczba2;
}
if("-".equals(c)){
wynik=liczba1-liczba2;
}
if("*".equals(c)){
wynik=liczba1*liczba2;
}
if("/".equals(c)){
wynik=liczba1/liczba2;
}


Powyższy zapis, można nieco uprościć (uprościć, w znaczeniu działania programu ), mianowicie , powyższy kod, wykona się niezależnie od tego co poda użytkownik bo masz same if'y . Konkretnie : sprawdzasz co podał aż 4 razy, a można to zrobić tak naprawdę alternatywą , czyli zamiast kolejnych if'ów, dać else if. To spowoduje, że jeśli wykona się instrukcja z bloku if (lub else if) , który jest wyżej w kodzie, to reszta nie zostanie wykonana , bo i po co, skoro odpowiednia opcja została już użyta. Taka mała ergonomia ;)
Nism0

„Resource leak: ‚odczyt1′ is never closed”.


Kompilator rzuca warningiem, bo nie zamykasz otwartego strumienia. Dobrą praktyką jest, zamykanie strumienia danych ( podobnie jak otwierasz plik, dobrze by było go na koniec zamknąć jeśli nie będziemy już z niego korzystać ). Jeśli tworzysz i otwierasz obiekt strumienia wejścia np:

Scanner input = new Scanner(System.in);

to na koniec wypadałoby go zamknąć, instrukcją :

input.close();
3DK

Ok. Też używam eclipse. Zmieniłem tak jak mówiłeś, dodatkowo zmieniłem jeszcze z nextLine na nextDouble co daje mi możliwość wpisywania liczb z ułamkami.
Cały kod jak zwykle na forum tutaj wrzucę tylko wycinek if'ów, dla przetestowania


if("+".equals(c)){
wynik=liczba1+liczba2;
}
else if("-".equals(c)){
wynik=liczba1-liczba2;
}
else if("*".equals(c)){
wynik=liczba1*liczba2;
}
else if("/".equals(c)){
wynik=liczba1/liczba2;
}

3DK

Ach i jeszcze jedno. Program działa ok. To co mi wyskakuje to tylko warningi, które wyskakują przy scannerach.

James

Do tych co uważają, że jest to zagmatwane:

zastanówcie się teraz przez krótką chwile, po jaką cholerę wam komendy konsolowe?

Stan

Można coś zrobić, żeby eclipse nie ignorował nextLine()?
Bo u mnie zachowuje się jakby linii:
String nazwa = odczyt.nextLine();
po prostu nie było :(

Sławek Ludwiczak

a nie przypadkiem readLine zamiast nextLine? Wklej kod na forum może, będzie łatwiej się odnieść

Stan

readLine wogóle nie wchodzi, przy nextLine :

System.out.println("Podaj nazwę pliku:");
String nazwa = odczyt.nextLine();
System.out.println("Podaj współrzędne pkt:");
wynik:
Podaj nazwę pliku:
Podaj współrzędne pkt:

wpisuje:

cos.txt

i wywala:

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.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)

Stan

Znalazłem rozwiązanie:
Scanner odczyt=new Scanner(System.in);
Scanner odczyt2=new Scanner(System.in);
Scanner odczyt3=new Scanner(System.in);
Przy każdej zmianie typu wczytywanej zmiennej muszę tworzyć nowy obiekt Scanner?Czy da się inaczej?

Mroczny

//Ja napisałem to tak :) ładniej brzmi :) jak rozmowa z botem :)

import java.util.Scanner;

public class Witaj {
private static Scanner odczyt;

public static void main(String[] args) {
String imie;
odczyt = new Scanner(System.in);

System.out.print("Cześć, jak masz na imie? ");

imie = odczyt.nextLine();

System.out.println("Witaj " + imie);
}

}

Michał Kasprzak

Moje rozwiązanie wygląda tak: http://pastebin.com/USEwhfFw

Wystarczył 1 obiekt klasy Scanner do odczytu obu liczb, nie potrzebny był osobny obiekt dla każdej liczby. W sumie, ten program jest już całkiem funkcjonalny, ale pobiera on jedynie 2 liczby, co jest ograniczeniem, bo niezbyt często wykonuje się obliczenia typu 2+2 w praktyce ;)

Mroczny

\\ Drugi pomysł ale z Samochodem ! :)

import java.util.Scanner;

public class WitajPraca {
public static void main(String[] args) {
String samochod;
Scanner odczyt = new Scanner(System.in);

System.out.print("Jakiej marki masz samochód ");
samochod = odczyt.nextLine();
System.out.print("A więc samochód masz marki "+samochod+ " a powiesz mi jakiego koloru on jest? ");

String kolor;
kolor = odczyt.nextLine();
System.out.print("Oooo... Extra! wiec masz "+samochod+" o kolorze "+kolor+"m");

}

leili

Dopisałam pracę domową do zapytania o imię:

import java.util.Scanner;

public class Witaj{
public static void main(String[] args){
System.out.println("Podaj swoje imię");
String imie; //W NIM ZAPISZEMY SWOJE IMIE
double liczba1;
double liczba2;
double doda, odej, mnoz, dziel;

Scanner odczyt = new Scanner(System.in); //OBIEKT DO ODEBRANIA DANYCH OD UŻYTKOWNIKA

imie = odczyt.nextLine();

System.out.println("Witaj "+imie); //WYŚWIETLAMY POWITANIE
System.out.println("Teraz podaj dwie liczby");

Scanner pobierz = new Scanner(System.in);
liczba1 = pobierz.nextDouble();
Scanner pobierz2 = new Scanner(System.in);
liczba2 = pobierz2.nextDouble();

System.out.println("Twoje liczby to: "+liczba1);
System.out.println(" oraz: "+liczba2);

System.out.println("Program przedstawi wyniki dodawania, odejmowania, mnożenia "
+ "i dzielenia Twoich liczb");

doda = liczba1+liczba2;
odej = liczba1-liczba2;
mnoz = liczba1*liczba2;
dziel = liczba1/liczba2;
System.out.println("wynik dodawania: "+doda );
System.out.println("wynik odejmowania: "+odej);
System.out.println("wynik mnożenia: "+mnoz);
System.out.println("wynik dzielenia: "+dziel);

}
}

Maciek

Mam nadzieję, że jeszcze ktoś tu zagląda bo mam problem z którym nie mogę sobie poradzić bez zbędnego tworzenia kodu.
Chodzi o "idiotoodporny" kalkulator, który rozwiązujący równania zapisane jako np. a+b czy c/d, tzn. wpisujemy jedną linijkę w której będzą liczby i znak działania jaki ma zostać wykonany.

Poniżej newralgiczny kawałek kodu:

double a,b,wynik;
char znak;
Scanner odczyt = new Scanner(System.in);
String rownanie = odczyt.nextLine();
if(rownanie==a+znak+b){
switch(znak){
case '+':
wynik=(a+b);
break;

W kompilacji wyrzuca Incompatible types string and double ze wskazaniem na pierwszy znak równości w warunku if'a. Zastosowanie equals() daje informację o braku zainicjalizowania zmiennych.

W C++ wszystko takie coś działa pod postacią if(cin>>'double'>>'char'>>'double'). A tutaj nie mam pomysłu jak to ogarnąć bez tysiąca linijek kodu...

Janosch

Może coś takiego Ci się przyda?
Mój kod wkleiłem na forum, poniżej masz linka.
http://forum.javastart.pl/Thread-Podstawowe-wej%C5%9Bcie-wyj%C5%9Bcie?pid=980#pid980

klk

Potrzebuje programu rozwiązującego układ równań metoda wyznaczników. Pomoże ktoś???

Janosch

Prosisz, masz ;) Powinien liczyć dobrze, sprawdź sobie.
http://forum.javastart.pl/Thread-Podstawowe-wej%C5%9Bcie-wyj%C5%9Bcie?pid=981#pid981

Albert

Programowałem w C++ i tam trzeba pozamykać pliki jak się je otworzyło, bo później ktoś może mieć nieupoważniony dostęp. Czy w tym przykładzie zapisu do pliku nie trzeba dodać odczyt.close(); i in.close(); ?