• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java, nie działa dziedziczenie przy danych liczbowych

Object Storage Arubacloud
0 głosów
149 wizyt
pytanie zadane 8 września 2017 w Java przez niezalogowany

Mam dwie klasy w Javie: Test oraz TestAdd. Przy próbie wykonania programu, jeśli metoda Scanner wczytuje liczby, to program się wywala. Przy Strinach nic się nie dzieje. Podobnie, jak ustawię dane "na sztywno". Wówczas ze stringami nie ma problemu.

klasa Test:

public class Test {

		private String imie = "Gucio";

		public void setImie(String imie) {
			this.imie = imie;
		}
		
		public String getImie() {
			return imie;
		}
		
		
		public static void main(String[] args) {
			//obiekt z danymi na sztywno
			Test object1 = new Test();
			System.out.println(object1.getImie());
			
			//obiekt z danymi do wprowadzenia
			TestAdd object2 = new TestAdd();
			System.out.println("Imie: ");
			object2.inputImie();
			System.out.println("Wiek: ");
			object2.inputWiek();
			System.out.println(object2.getImie() + " " +object2.getWiek());
		}
	
}

Klasa TestAdd:

 

import java.util.Scanner;

public class TestAdd extends Test{

	private String imie;
	
	public void setImie(String imie) {
		this.imie = imie;
	}
	
	public String getImie() {
		return imie;
	}
	
	public String inputImie() {
		try(Scanner inImie = new Scanner(System.in)){
			imie = inImie.nextLine();
		}
		
		return imie;
	}
	
	//wiek
	private int wiek;
	
	public int inputWiek() {

		try(Scanner inWiek = new Scanner(System.in)){
			wiek = inWiek.nextInt();
		}
		return wiek;
	}
	
	public void setWiek(int wiek) {
		this.wiek = wiek;
	}
	
	public int getWiek() {
		return wiek;
	}
	
}

Błędy, które wyrzuca:

 

Exception in thread "main" java.util.NoSuchElementException
	at java.util.Scanner.throwFor(Scanner.java:862)
	at java.util.Scanner.next(Scanner.java:1485)
	at java.util.Scanner.nextInt(Scanner.java:2117)
	at java.util.Scanner.nextInt(Scanner.java:2076)
	at TestAdd.inputWiek(TestAdd.java:29)
	at Test.main(Test.java:24)

 

2 odpowiedzi

0 głosów
odpowiedź 8 września 2017 przez Tomasz90 Nałogowiec (25,140 p.)
Prawdopodobnie problem polega na tym, że getter pobiera za każdym razem wartość przy pomocy Scannera. Wpisujesz z klawiatury dane i za pierwszym razem Ci dobrze pobierze tą wartość, ale za drugim już nie ma elementu i sie wysypuje. Powinieneś w getterze w klasie TestAdd dodać if-a który sprawdzi czy zmienna jest nullem. Jeżeli tak jest wykonuje się to co w try, a w pozostałych przypadkach zwraca wartość.
0 głosów
odpowiedź 9 września 2017 przez Mateusz51 Nałogowiec (28,180 p.)
edycja 9 września 2017 przez Mateusz51
Problemem jest to że tworzysz dwa Scannery przy operacjach na jednakowym strumieniu. Zakładam że problem jest z buforem scannera.

Rozwiazaniem jest wyciagniecie scannera do pola klasy.

Plus takie pytanie. Jeśli TestAdd dziedziczy po Test to po co implementowałeś takie metody jak Get/Set Imie? Nie lepiej je odziedziczyć? Jeśli potrzebujesz dostepu do pola imie w TestAdd mozesz uczynic go protected a nie tworzyć swojego.

Podobne pytania

0 głosów
2 odpowiedzi 1,675 wizyt
0 głosów
0 odpowiedzi 121 wizyt
0 głosów
1 odpowiedź 340 wizyt
pytanie zadane 13 września 2017 w Java przez ebo96rok Bywalec (2,980 p.)

92,661 zapytań

141,557 odpowiedzi

319,999 komentarzy

62,028 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...