Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Niedziałający Scanner


Rekomendowane odpowiedzi

Opublikowano

Cześć, robiłem zadanie z metod (takie ćwiczenia) i postanowiłem trochę rozszerzyć zakres i dać trochę więcej zmiennych (czyli w tablice) i wszystko pięknie ładnie, lecz gdy dochodzi do wpisania imienia (użycie scanner) to pierwszy scanner omija drugi normalnie działa lecz jakieś śmieszne coś wyskakuje z poprzedniego scannera. Łapcie tutaj kodzik:

 

 

 

package programowanie.obiektowe.zadanie.pracownik;

import java.util.Scanner;

public class Firma {
	static int liczba;
	int getLiczba(){
		return liczba;
	}
	public static void main(String[] args){
		Pracownik p = new Pracownik();
		System.out.println("Wpisz liczbę pracowników do zarejestrowania: ");
		Scanner s = new Scanner(System.in);
		liczba = s.nextInt();
		String[] name = new String[liczba];
		String[] nazwisko = new String[liczba];
		int[] wiek = new int[liczba];
		for(int i=0;i<liczba;i++){
			System.out.println("Wpisz imie: ");
			name[i] = s.nextLine();
			System.out.println("Wpisz nazwisko "+name+ ": ");
			nazwisko[i] = s.nextLine();
			System.out.println("Wpisz wiek "+name+": ");
			wiek[i] = s.nextInt();
		}
		for(int i = 0;i<liczba;i++){
			p.setName(name[i], i);
			p.setNazwisko(nazwisko[i], i);
			p.setAge(wiek[i], i);
		}
		System.out.println("Dane poszczególnych pracowników:\n");
		for(int i = 0;i<p.imiona.length;i++){
			System.out.println("Pracownik "+i);
			System.out.println("Imie: "+p.getName(i)+"\n"
							+ "Nazwisko: "+p.getNazwisko(i)+"\n"
							+ "Wiek: "+p.getAge(i)+"\n");System.out.println();
			
		}
		s.close();
	}
}
 

 

 

 

 

 

 

A tutaj druga klasa:

 

 

package programowanie.obiektowe.zadanie.pracownik;

public class Pracownik {
	Firma f = new Firma();
	String[] imiona = new String[f.getLiczba()];
	String[] nazwisko = new String[f.getLiczba()];
	int[] wiek = new int[f.getLiczba()];
	void setName(String imie, int id){
		imiona[id] = imie;
	}
	void setNazwisko(String nazw, int id){
		nazwisko[id] = nazw;
	}
	void setAge(int age, int id){
		wiek[id] = age;
	}
	String getName(int id){
		return imiona[id];
	}
	String getNazwisko(int id){
		return nazwisko[id];
	}
	int getAge(int id){
		return wiek[id];
	}
}
 

 

 

 

I konsolka:

 

 

Wpisz liczbę pracowników do zarejestrowania: 
15
Wpisz imie: 
Wpisz nazwisko [Ljava.lang.String;@10f11b8: 
A
Wpisz wiek [Ljava.lang.String;@10f11b8: 
5
Wpisz imie: 
Wpisz nazwisko [Ljava.lang.String;@10f11b8: 

 

 

Jeżeli pomogłem, daj + Ciebie nic nie kosztuje Mi znaczy wiele.

 

 

 

 

 

 

 

Zachęcam do podsyłania pomysłów na film jako poradniki na YouTube

 

Opublikowano

1) Próbujesz wypisać w konsoli tablicę. Zmień name na name.

2) Zmień nextLine na next.

 

I taka sugestia - Obiekt pracownik nie jest obiektem pracownika, ale obiektem pracowników. Lepiej by było, jakbyś zmienił tablicę na pojedyncze wartości w klasie Pracownik, a w metodzie main zrobił po prostu tablicę pracowników.

708121422388637873334.png

Opublikowano

1) W sumie tego nie wziąłem pod uwagę :)

2) Podziałało. Tylko teraz problem z zapisem:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
	at programowanie.obiektowe.zadanie.pracownik.Pracownik.setName(Pracownik.java:12)
	at programowanie.obiektowe.zadanie.pracownik.Firma.main(Firma.java:23)

(12) imiona[id] = imie;

(23) p.setName(name, i);

 

teraz posegregowałem jeszcze troche zmienne więc:

 

 

package programowanie.obiektowe.zadanie.pracownik;

import java.util.Scanner;

public class Firma {
	public static void main(String[] args){
		Pracownik p = new Pracownik();
		System.out.println("Wpisz liczbę pracowników do zarejestrowania: ");
		Scanner s = new Scanner(System.in);
		p.setLiczba(s.nextInt());
		String[] name = new String[p.getLiczba()];
		String[] nazwisko = new String[p.getLiczba()];
		int[] wiek = new int[p.getLiczba()];
		for(int i=0;i<p.getLiczba();i++){
			System.out.println("Wpisz imie: ");
			name[i] = s.next();
			System.out.println("Wpisz nazwisko "+name[i]+ ": ");
			nazwisko[i] = s.next();
			System.out.println("Wpisz wiek "+name[i]+": ");
			wiek[i] = s.nextInt();
		}
		for(int i = 0;i<p.getLiczba();i++){
			p.setName(name[i], i);
			p.setNazwisko(nazwisko[i], i);
			p.setAge(wiek[i], i);
		}
		System.out.println("Dane poszczególnych pracowników:\n");
		for(int i = 0;i<p.imiona.length;i++){
			System.out.println("Pracownik "+i);
			System.out.println("Imie: "+p.getName(i)+"\n"
							+ "Nazwisko: "+p.getNazwisko(i)+"\n"
							+ "Wiek: "+p.getAge(i)+"\n");System.out.println();
			
		}
		s.close();
	}
}
 

 

 

 

 

 

 

package programowanie.obiektowe.zadanie.pracownik;

public class Pracownik {
	int liczba;
	String[] imiona = new String[getLiczba()];
	String[] nazwisko = new String[getLiczba()];
	int[] wiek = new int[getLiczba()];
	void setLiczba(int i){
		liczba = i;
	}
	void setName(String imie, int id){
		imiona[id] = imie;
	}
	void setNazwisko(String nazw, int id){
		nazwisko[id] = nazw;
	}
	void setAge(int age, int id){
		wiek[id] = age;
	}
	String getName(int id){
		return imiona[id];
	}
	String getNazwisko(int id){
		return nazwisko[id];
	}
	int getAge(int id){
		return wiek[id];
	}
	int getLiczba(){
		return liczba;
	}
}
 

 

 

Jeżeli pomogłem, daj + Ciebie nic nie kosztuje Mi znaczy wiele.

 

 

 

 

 

 

 

Zachęcam do podsyłania pomysłów na film jako poradniki na YouTube

 

Opublikowano

1) Próbujesz wypisać w konsoli tablicę. Zmień name na name.

2) Zmień nextLine na next.

 

I taka sugestia - Obiekt pracownik nie jest obiektem pracownika, ale obiektem pracowników. Lepiej by było, jakbyś zmienił tablicę na pojedyncze wartości w klasie Pracownik, a w Main zrobił po prostu tablicę pracowników.

aktualnie ten kod nie ma nawet racji bytu o.O

http://ideone.com/uWkmFe

wczytywanie wieku pomijałem, bo serio coś wykrzaczało.

 

Tworzysz pracownika na początku kodu, on wtedy pobiera z firmy, liczbę, której jeszcze nie wczytałeś, więc jest zerem.

Do tego to i tak nie ma sensu, tak jak joda pisze, ten prackownik to ma kilka imon czy jak? :D

 

Po to są klasy, żeby każda jej instancja przechowywała jakieś dane, jako że mi się nudzi, za minutkę coś dodam....

1438614356923701010629.png

 

Opublikowano
String[] imiona = new String[getLiczba()];
	String[] nazwisko = new String[getLiczba()];

To się tworzy w konstruktorze. Za każdym razem gdy zmieniasz liczbę, powinieneś zmieniać wielkość tablic (tj. tworzyć nowe)

708121422388637873334.png

Opublikowano

Ogólnie to zrobiłem (a raczej chciałem zrobić) że tablica imie ma swoje imię itd i tablica String[] imie ma 3 imiona Patryk, Rafał, Darek

I Patryk ma id 0, (bo java tak zapisuje z tego co zaobserwowałem) Rafał (1) Darek (2)

 

I zrobiłem to w pętli aby zapisać poszczególne dane ich i wtedy te 3 tablice miały by przypisanie do jednego pracownika (po id)

 

//Jutro zobaczę waszę sugestie bo już mi mózg odcina :/

Jeżeli pomogłem, daj + Ciebie nic nie kosztuje Mi znaczy wiele.

 

 

 

 

 

 

 

Zachęcam do podsyłania pomysłów na film jako poradniki na YouTube

 

Opublikowano

Ogólnie to zrobiłem (a raczej chciałem zrobić) że tablica imie ma swoje imię itd i tablica String[] imie ma 3 imiona Patryk, Rafał, Darek

I Patryk ma id 0, (bo java tak zapisuje z tego co zaobserwowałem) Rafał (1) Darek (2)

 

I zrobiłem to w pętli aby zapisać poszczególne dane ich i wtedy te 3 tablice miały by przypisanie do jednego pracownika (po id)

 

//Jutro zobaczę waszę sugestie bo już mi mózg odcina :/

To po co ci ten obiekt pracownik, jak i tak robisz to na tablicach? :D

 

 

Tu masz na obiekcie:

 

http://ideone.com/srkx3e

1438614356923701010629.png

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...