problem z wprowadzaniem danych

0

programuje w javie od tygodnia i mam problem z wprowadzaniem danych. chce zapisac do zmiennej typu int liczbe z klawiatury... ale niewiem jak... próbowalem z metoda System.in.read() ale cos nie dziala do konca... prosze o pomoc :)

0

Musisz opakowac strumien klawiatury w buforowany strumien, czyli :

BufferedReader keyboard=new BufferedReader(new InputStreamReader(System.in));

i pozniej juz metody BufferedReadera stosujesz, np. readLine(), itd.

pozdrawiam
johny

0

wprowadzanie z konsoli to juz chyba nie ten okres... mamy XXI wiek. Stworz okienko i wrzuc do niego komponent z ktorego bedziesz pobieral dane, a jezeli to dla ciebie za trudne to chociaz wywalaj na ekranie JOptionPane, dzieki temu bedziesz mial najprostsza komunikacje z uzytkownikiem, to buforowanie oczywiscie jest poprawne, sam tego kiedys uzywalem, ale to jest po prostu, nieestetyczne, nieergonomiczne, niepraktyczne itd. !

0

Wprowadzanie z konsoli ma jak najbardziej sens jak sie robi aplikacje konsolowa :) Jak piszesz sobie np. serwerek to niekoniecznie chcesz pakowac wodotryski w rodzaju okienek skoro chcesz przekazac np. raptem 3 komendy. A serwer zajmuje duuuuzo mniej w pamieci. Of coz to przyklad tylko.

pozdrawiam
johny

0

wykorzystam ten temat bo chodzi mi o to samo, jak wykonac cos takiego??

Aby program wykonywal nastepujace polecenie chce np wprowadzic z klawiatury jakas liczbe wiec program ma sie zapytac "POdaj x"??I ja mu podaje i cos tam dalej wykonuje przeczytalem ze trzeba chyba wykorzystac to BufferedReader ,ale nie wiem kompletnie jak to odpalic, znalazlem jakis maly programik w ksiazce cos takiego:

import java.io.*;
public class wczytywanie {

public static void main(String[] args) {

	throws IOExpection {
		BufferedReader stdin = new BufferedReader(
				new InputStreamReader(System.in));
		String s;}
		while((s= stdin.readLine()!=null&& s.length()!=0)
				System.out.println(s));
	}

}

}

I niby ma to dzialac al emi nic nie dziala nie moge skompilowac tego co jest nie tak moze ktos tak lopatologicznie wyjasnic,bede wdzieczny pozdrawiam!!

0

Czym kompilujesz, jakie bledy i inne standardowe informacje zamiesc, bo tu nie cech wrozek. Wyglada ok - jesli pytasz co pozniej z tym, to musisz po prostu skonwertowac odczytany string na liczbe (o ile pamietam to metoda Parse z kazdej z opakowujacych klas).

0

rzuca mi sie o throws, stdin i System i nie wiem o co chodzi??

0

throws pisze - ---- błąd skaldniowy elementu throws oczekiwano interface
stdin - nie mozna rozpoznacz zmiennej stdin
system - blad skadniowy elementu system usun ten element

0

a wszytsko pisze w eclipsie

0

Naprosciej i najwygodniej to zastosować sobie Od razu metode ktora zwraca nam wartość z klawiatury odpowiedniego typu.
Dla Stringa nazwijmy ja readLine();

public static String readLine(){
	try{
		return new BufferedReader(
			new InputStreamReader(System.in)).readLine();
	}catch(IOException e){
		return null;
	}
}

A sam odzczyt wtedy wyglada tak

String line = readLine();
System.out.println(line);

W przypadku gdy chcemy by zmiena byla np. int badz double trzeba uŻyć metody parseXXX z odpowiedniej kalsy opakowującej typy pierwotne, gdzie XXX to nazwa klasy opakowujacej.
Dla intów mamy Integer.parseInt(int_ukryty_w_stringu) i tak zmieniamy odpowiednio metode np na readInt() i zwracana wartoscia wtedy jest:

 Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());

Oczywiscie trzeba jeszcze zmienic zwracana wartosc metody, oraz wartosc zwracana w przypadku bledu bo int nie przechowuje null'a, można zmienic np na -1. Co w całosci wyglada tak.

public static int readInt(){
	try{
		return Integer.parseInt(new BufferedReader(
                            new InputStreamReader(System.in)).readLine());
	}catch(IOException e){
		return -1;
	}
}

Do metody zwracjacej doubla to juz nie trudno sie domyslic jak to zrobic.

gadhet:
co to za ksiażka, bo albo jest do d... albo zle przepisałeś bo ten fragment nie ma prawa sie zkompilować. Jest tam tyle bledów że aż nie chce mi się ich opisywać

Pozdawiam BookaYashee

0

Dziki Booka za opisanie i pomoc,a co do ksiazki to jest to ksiazka Thinking in Java podobno jedna z lepszych na stronie 772 jest taki przyklad

0

Do tej pory do czytania z klawiatury stosowalem Scanner np:

import java.util.Scanner;

class rowKwadr {
public static void main(String args[]) {
	Scanner myScanner = new Scanner(System.in);
	double a, b, c, delta, x1, x2;
//Równanie Kwadratowe: a*x^+b*x+c
		System.out.print("Podaj a: ");
			a = myScanner.nextDouble();            //Czytam z klawiatury
		System.out.print("Podaj b: ");
			b = myScanner.nextDouble();           //Czytam z klawiatury
		System.out.print("Podaj c: ");  
			c = myScanner.nextDouble();           //Czytam z klawiatury
//Licze DELTE delta = b^-4*a*c
delta=(b*b)-4*a*c;
/*Rozwiazanie: Jeśli DELTA<0: Brak rozwiazania.
 *					 DELTA=0: -b/2a
 *					 DELTA>0: 2 Rozwiązania:
 *					 		    x1=(-b + sqrt DELTA)/2*a
 *					 		    x2=( b + sqrt DELTA)/2*a
 */
if (delta<0){
	System.out.println("Brak Rozwiazania "+"delta = "+ delta);
}else if (delta==0){
	x1=(-b/2*a);
	System.out.println("x1 = "+x1+"\ndelta = "+delta);
}else{
	x1=(-b + Math.sqrt (delta))/2*a;
	x2=(b + Math.sqrt (delta))/2*a;
	System.out.println("x1 = "+x1+"\nx2 = " +x2+ "\ndelta = "+delta);
}
System.out.print("\n\n");
}
}

Tutaj wszystko dziala.. Kompiluje sie i smiga.

Moze mi ktos powiedziec dlaczego drugi programik pobierajacy dane z klawiatury w ten sam sposob nie dziala prawidlowo?
Kompiluje sie jednak przy probie wprowadzenia liczby widze tylko

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:819)
    at java.util.Scanner.next(Scanner.java:1431)
    at java.util.Scanner.nextDouble(Scanner.java:2335)
    at resztaDzielenia.main(resztaDzielenia.java:18)

Process completed.

Drugi Program

import java.util.Scanner;
 
public class resztaDzielenia {
    
    public static void main(String[] args) {
		Scanner myScanner = new Scanner(System.in);
		double pierwszaCyfra, drugaCyfra, reszta;
    System.out.print("Program zwroci reszte z dzielenia 2 cyfr.\n\nPodaj pierwsza cyfre: ");
    		pierwszaCyfra = myScanner.nextDouble();            //Tu program sie sypie
    System.out.print("\nTeraz podaj 2 cyfre: ");
    		drugaCyfra = myScanner.nextDouble();
//Dzielenie modulo
    reszta=pierwszaCyfra%drugaCyfra;
    	System.out.println("Reszta z dzielenia "+pierwszaCyfra
    						+"/"+drugaCyfra+" wynosi: "+reszta);
    }
}

Z gory dzieki za jakas podpowiedz bo mi powoli brakuje pomyslow :-/

ps: JDK najnowsze, pisze w JCreator 4.0

0

Nie wiem dlaczego wywala ci się ten bład. Odpaliłem program i było wszystko wporządku.
Czytajac API to wyjatek InputMismatchException może powstać wtedy gdy otrzymana wartość nie pasuje do typu pod jakim ma byc zapisana, albo wprowadzana wartość może przekroczyć zakres.
Dziwi mnie jeszcze ta linijka

at resztaDzielenia.main(resztaDzielenia.java:18)

znaczy to ze stos wywołan prowadzacych do bledu powstał w 18 linijce programu resztaDzielenia a program ma tylko 17 linijek

Do tej pory do czytania z klawiatury stosowalem Scanner

Scaner istnieje od wersji 1.5 starsze wersje porzebuja metod pisanych samemu

Pozdrawmian BookaYashee

0

Dziwne.. sprawdzilem ten sam kod w Eclipse i wszystko dzila...
Czas chyba na zmiane IDE ..

BookaYashee napisał(a)

Do tej pory do czytania z klawiatury stosowalem Scanner

Scaner istnieje od wersji 1.5 starsze wersje porzebuja metod pisanych samemu

Pozdrawmian BookaYashee

.. istnieje od wersji 1.5 ...
kiedy zainteresowalem sie Java wersja 1.5 byla juz wersja aktualna, jestem wiec nowy w tym temacie ..
Widac to chyba po stopniu trudnosci moich programow:]

tak czy inaczej Dzieki za pomoc BookaYashee ... za inspiracje
W koncu jesli u ciebie zadzialal czemu mialby nie dzialac u mnie :-)

[browar] PZDR

1 użytkowników online, w tym zalogowanych: 0, gości: 1