Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Konstruktory a scanner
03-17-2015, 05:10 PM
Post: #1
Konstruktory a scanner
Witam mam taki problem że gdy odwołuję się do konstruktora 2 elementowego, a wartości są wklepywane z klawiatury poprzez scanner to drugiej zmiennej nie czyta, o ile problem bez wiekszych trudnosci omijam dodajac dodatkowa zmienna to chcialbym to zrobic solidnie a nie obuduwujac dodatkowymi zmiennymi . kod dzialajacy wyglada tak:
import java.util.InputMismatchException;
import java.util.Scanner;

public class kolo {

	private double promień;
	
	public kolo()
	{
		promień=1;
		// konstruktor który zamienia domysle 0 na 1 gdy nie podamy wartosci w programie
		
	}
	public kolo(double r)
	{
		promień=r;
	}
	public kolo(double r, String j){
		promień=r;
		if(j.equals("km")){
			promień=promień*1000;
		}
		else if(j.equals("cm")){
		promień=promień/100;
		}
		else 
		{
			System.out.println("zła jednostka");
		}
	}
	public void setPromien(double r){
		promień= r;
		
	}
	public double getPromien(){
		return promień;
	}
	
	public double obliczObwodKola(){
		
		return 2*Math.PI*promień;
		
	}
	public double obliczPoleKola(){
		
		return Math.PI*promień*promień;		
	}
	public static void main(String[] args) 
	{
		Scanner in = new Scanner(System.in);
		System.out.println("podaj jednostke ");
		String a= in.nextLine();
		//dodane ponież w kolo kolko = new kolo(in.nextDouble(),a); jeśli zamist a dodam input nie działa
		System.out.println("podaj promien kola ");
		kolo kolko = new kolo(in.nextDouble(),a);
		//kolko.setPromien(in.nextDouble());   wykorzystane we wczesniejszej wersji programu teraz nie ptorzebne
		System.out.println("promien kola = "+ kolko.getPromien()+"m");
		System.out.println("obwod kola = "+ kolko.obliczObwodKola()+"m");
		System.out.println("Pole kola = "+ kolko.obliczPoleKola()+"m");
	}

}
Natomiast zamiast zmiennej a chciaklbym to zastapic jedna linijka o tak ale wtedy nie dziala
System.out.println("podaj promien kola ");
		kolo kolko = new kolo(in.nextDouble(),in.nextLine()); 
Z góry dziekuję za pomoc
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
03-17-2015, 09:42 PM
Post: #2
RE: Konstruktory a scanner
Czy dobrze rozumiem?
Chcesz by schemat działania programu wyglądał tak:
(komputer)podaj promien kola
(użytkownik) 3, 4
Czy jak?

GG: 2802571
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
03-19-2015, 03:16 PM (Ten post był ostatnio modyfikowany: 03-19-2015 03:17 PM przez Turtelian.)
Post: #3
RE: Konstruktory a scanner
o ile dobrze zrozumialem to tak Smile
Chodzi o to aby to działało tak jak działa pierwswzy program bez dodatkowej zmiennej jaka tam jest a, ktore wprowadziłem bo gdy napisalem tak jak jest ponizej nie dzialalo poprawnie (zawsze wyrzucalo ze zła jednostka).
kolo kolko = new kolo(in.nextDouble(),in.nextLine());

Generalnie :
Podaj promień koła : 3 enter km
i to zczytuje odrazu w
kolo kolko = new kolo(in.nextDouble(),in.nextLine());

Chciałbym wiedzieć dlaczego tak nie działa(dlaczego pierwszy input działa normalnie a drugi po przecinku już nie), oraz co zrobić aby dało się tak albo podobnie bez dodatkowej zmiennej to rozwązać.
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
03-19-2015, 04:51 PM (Ten post był ostatnio modyfikowany: 03-19-2015 04:59 PM przez lolo.)
Post: #4
RE: Konstruktory a scanner
Nie możesz czegoś takiego zrobić ponieważ, po użyciu nextDouble() powinieneś wyczyścić Scanner ponieważ jak napiszesz:
in.nextDouble();
in.nextLine();
To w in.nextLine() wpada znak nowej linii z pierwszej metody.

Możesz użyć innego Scannera bo wtedy niema problemu ew. możesz napisać:
kolo kolko = new kolo(Double.parseDouble(in.nextLine()),in.nextLine());
i to powinno zadziałać

GG: 2802571
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
03-19-2015, 05:29 PM
Post: #5
RE: Konstruktory a scanner
ok chyba rozumiem jak bede mial chwile przetestuje.
czyli nowy obiekt klasy skaner robie tak np:
Scanner in2 = new Scanner(System.in);
i pozniej :
kolo kolko = new kolo(in.nextDouble(),in2.nextLine());
i powinno "śmigać"
Dzieki za pomoc jakby coś nie działało to napisze Smile
PS: tego niestety nie rozumiem w ogole wiec odpuszcze Smile:
kolo kolko = new kolo(Double.parseDouble(in.nextLine()),in.nextLine());
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
03-19-2015, 05:59 PM
Post: #6
RE: Konstruktory a scanner
Tak, właśnie powinieneś zrobić ale moim zdaniem to to samo co tworzenie dodatkowej zmiennej. A chyba lepiej by wyglądało jak by użytkownik dostawał pytanie o promień a później o jednostkę. A jeszcze lepiej jakby miał tylko pytanie o promień i by wpisywał np. 5km a nie pytanie o promień i wpisuje 5<Enter>km

GG: 2802571
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
03-19-2015, 06:19 PM
Post: #7
RE: Konstruktory a scanner
To program do nauki tylko i wyłącznie dlatego zacząłem sie zastanawiać dlaczego nie działa tak jak chciałem na początku. Fakt w takim wypadku nie ma znaczenia czy dodatkowa zmienna czy scanner, bo kodu tyle samo i skomplikowanie podobne.
Jak zrobić żeby wpisywał 5km i odczytało to jako 5 i km jednostka niestety nie wiem dlatego rozbite na 2 osobne pytania.
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
03-19-2015, 08:53 PM
Post: #8
RE: Konstruktory a scanner
Musisz użyć np. nextLine() i otrzymany wynik np. 5km prze parsować na 5 oraz km, które przekażesz do konstruktora klasy kolo.

GG: 2802571
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
05-05-2015, 04:50 PM (Ten post był ostatnio modyfikowany: 05-05-2015 04:51 PM przez Turtelian.)
Post: #9
RE: Konstruktory a scanner
Witam ponownie Smile w ramach powtórki piszę część programów od nowa , część rozbudowuje itp i przy rozwinięciu programu wyżej napotkałem znowu na problemy.
package powtorkaobiektowe;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Kolo {
	private double promien;
	private int id;
	private static int nextid;
	public Kolo()
	{
		this(1);
	}
	public Kolo(double r){
		this(r,"m");
	}
	
	public Kolo(double r, String j)
	{
		id=nextid;
		promien=r;
		if(j.equals("km")){
			promien=promien*1000;
		}
		else if(j.equals("cm")){
			promien=promien/100;
		}
		else if(j.equals("m")){
			promien=promien;
		}
		else{
			System.out.println("zła jednostka");
		}
		
	}
	public void setPromien(double r){
		promien=r;
	}
	public int getId(){
		return id;
	}
	public double getPromien(){
		return promien;
	}
	public double obliczObwodKola(){
		return 2*Math.PI*promien;
	}
	public double obliczPoleKola(){
		return Math.PI*promien*promien;
	}
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		//System.out.println("podaj jednostke ");
		//String b =in.nextLine();
		//System.out.println("podaj promien ");
		//double a = in.nextDouble();
		//Kolo kolo= new Kolo(a,b);
		// wersja z 2zmiennymi
		System.out.println("podaj ile kolek cchesz opisać");
		int a=in.nextInt();
		Kolo[] kolka= new Kolo[a];
		for (int i=0; i< kolka.length; i++ ){
			System.out.println("podaj jednostke kola nr" + (i+1));
			String b =in.nextLine();
			System.out.println("podaj promien kola nr" + (i+1));
			double c = in.nextDouble();
			kolka[i]=new Kolo(c,b);
		}
		for(Kolo x:kolka){
			System.out.println("promien kola nr"+x.getId()+" wynosi : " + x.getPromien() + "m");
			System.out.println("obwod kola"+x.getId()+" wynosi : " + x.obliczObwodKola()+ "m" );
			System.out.println("pole kola"+x.getId()+" wynosi : " + x.obliczPoleKola()+ "m2");
			
		}
	}
	static {
		nextid=1;
	}

}
 
otoż po pierwsze scaner przy pytaniu o jednostke nie czeka w ogole na nia tylko od razu przeskakuje promienia
w konsoli wyglada to skrocie tak : Podaj jednostke Podaj promien. Co skutkuje tym że musze dac od razu promien a jednostka zostaje "pusta"
Drugi problem z id kola, po prostu nie działa, wszykie kola jako kola nr 1 opisuje
problem pewnie lezy w tej czesci kodu :

System.out.println("podaj ile kolek cchesz opisać");
		int a=in.nextInt();
		Kolo[] kolka= new Kolo[a];
		for (int i=0; i< kolka.length; i++ ){
			System.out.println("podaj jednostke kola nr" + (i+1));
			String b =in.nextLine();
			System.out.println("podaj promien kola nr" + (i+1));
			double c = in.nextDouble();
			kolka[i]=new Kolo(c,b);
		}
	
		for(Kolo x:kolka){
			System.out.println("promien kola nr"+x.getId()+" wynosi : " + x.getPromien() + "m");
			System.out.println("obwod kola"+x.getId()+" wynosi : " + x.obliczObwodKola()+ "m" );
			System.out.println("pole kola"+x.getId()+" wynosi : " + x.obliczPoleKola()+ "m2"); 

dodam ze nr id kola probowałem zrobic przez dodanie nr kola w petli for(kolox:kolka) po prostu jako nr=1 i na koncu inkrementacje nr++.
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości