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

Pomoc w zadaniu Java/cokolwiek

Object Storage Arubacloud
0 głosów
857 wizyt
pytanie zadane 25 listopada 2017 w Java przez Patryk Kirszenstein Bywalec (2,400 p.)
edycja 25 listopada 2017 przez Patryk Kirszenstein

Witam serdecznie . Nie proszę o gotowca tylko o pomysł, radę . Nie mam pomysłu jak zrobić takie zdanie.

Problem jest że nie wiem jak połączyć wartości z dwóch tablic. Wiecie Polak miał 80 i 60 pk a potem to posortować osobno . Myślałem nad hasmapami albo już tak najbardziej hard zrobić baze danych ale tego nie potrafię . Jakieś rady ? 

EDIT: Zadanie nie musi być koniecznie oparte o tablice jak podano Hashe itd wchodzą w gre

2 odpowiedzi

+1 głos
odpowiedź 25 listopada 2017 przez Aisekai Nałogowiec (42,190 p.)
wybrane 29 czerwca 2018 przez Patryk Kirszenstein
 
Najlepsza
Mapy raczej odpadają, a szkoda, bo masz w zadaniu napisane, że należy wprowadzić następujące tablice.

Tak to musisz w pierwszym zadaniu pierwszym podpunkcie, zrobić sobie listę, do której byś dodawał nazwiska osób którzy napisali maturę na więcej niż 30% z Polskiego.

W drugim podpunkcie zadaniu obie matury muszą być na więcej niż 30% (&& w ifie). W trzecim musisz użyć || w ifie.  W czwartym tak samo.

Drugie zadanie: znaleźć max dla Polskiego i Matury, zapisać max i zapisać nazwiska.

Trzecie iterujesz po wszystkich elementach tablicy, sumujesz i dzielisz.

W czwartym, możesz wykorzystać jakiś algorytm do sortowania, modyfikując go tak żeby sortował tablicę z nazwiskami "po" wartościach z danej matury.

Sam jednak albo bym to zrobił na mapach, jak by można było (Map<String, Integer[]>), albo klasę Uczen i tam dac nazwisko,matematyka,polski (albo jak chcesz to sobie nazwać) jako pola.
komentarz 25 listopada 2017 przez Patryk Kirszenstein Bywalec (2,400 p.)
ja wiem tylko  w drugim jak zapisać nazwisko do wyniku ? bo mam same wyniki i nie wiem jak skojarzyć z nazwiskami
komentarz 25 listopada 2017 przez Patryk Kirszenstein Bywalec (2,400 p.)
nie problem jest wykonać te zadania ale problem jest mi wypisać czyje to wyniki
komentarz 25 listopada 2017 przez Aisekai Nałogowiec (42,190 p.)
Dodaj sobie jedną zmienną String przechowującą nazwisko, dla np. max wyniku w zadaniu 2. I jeżeli jakiś uczeń bedzie miał wyższą ocenę niż dotychczasowa najwyższa, to do zmiennej przechowującej najwyższą ocenę przypisz ocenę tego ucznia, a do zmiennej przechowującej nazwisko - nazwisko tego ucznia. Ew możesz zamiast Stringa zrobić inta przechowującego indeks do nazwiska w tablicy z nazwiskami

PS: Mówiąc oceny mam na myśli %.
komentarz 26 listopada 2017 przez Patryk Kirszenstein Bywalec (2,400 p.)
Załóżmy że nie odpadają bo pan chwali postęp poza zadanie. Czy mam użyć map  z multi values ?

https://stackoverflow.com/questions/4956844/hashmap-with-multiple-values-under-the-same-key

Czytałem to na stacku ale nie wiem które z opcji wybrać bo nigdy nie robiłem hasmapa gdzie jeden key ma więcej niż jedną wartość i ma być sortowany po nich.

 

Chyba że bym wyciągał wartości od klucza sortował i pobierał osobno klucz . Też jakiś pomysł
komentarz 26 listopada 2017 przez Aisekai Nałogowiec (42,190 p.)
Prościej byłoby zrobić Mapę z String jako klucz i int[] (czy też Integer[]) jako wartości. Nie musiałbyś tworzyć dodatkowej klasy z imieniem, matmą i polskim.  Prościej byłoby potem posortować tak jak masz tutaj napisane: https://stackoverflow.com/questions/29567575/sort-map-by-value-using-java-8 .

Zrobienie zwykłej Listy z Klasą Uczeń (imie, matma, polski) możesz posortować tak:

https://dzone.com/articles/java-8-comparator-how-to-sort-a-list
komentarz 26 listopada 2017 przez Patryk Kirszenstein Bywalec (2,400 p.)
Okej wielkie dzięki. Za godzinkę to sobie ogarnę, jak coś jeszcze będę pisać. Na dłuższą metę  SQL jest bardzo potrzebny do Javy ? czy  hashe później też działają bo w sumie SQL dobrze znam tylko jeszcze nigdy nie łączyłem go z javą więc nie wiem czy się za to brać  :)
+1 głos
odpowiedź 25 listopada 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Nie wiem na jakim stopniu porogramowanja jestes. Ale ja bym stworzyl klase uczen z danymi ucznia.
komentarz 26 listopada 2017 przez Patryk Kirszenstein Bywalec (2,400 p.)
w sensie na każdego ucznia ? ciekawy pomysł ale to by było bardzo dużo klas z  bardzo małą ilością danych . Chyba że ci chodzi o klase uczeń która by zawierała wyniki testu+nazwę . To w sumie świetny pomysł . Ja zaczynałem kombinować nad połączeniem mysql z java :P
1
komentarz 26 listopada 2017 przez Tomasz90 Nałogowiec (25,140 p.)
Najlepiej zrób to zadanie tak jak napisał Mateusz tzn. masz klasę uczeń która ma 3 pola: nazwisko, wynik testu z matematyki, wynik testu z polskiego. No a potem spróbuj zrobić tak jak Ci opisali wyżej te podpunkty. Jak zrobisz wszystko to tak dla samego siebie spróbuj zrobić to zadanie wykorzystując streamy z Javy 8. Zobaczysz o ile można tworzyć bardziej czysty kod.
komentarz 30 listopada 2017 przez Patryk Kirszenstein Bywalec (2,400 p.)
Witam , piszę to w Java z klasami ale mam 10 obiektów i wyciąganie wartości z każdego obiektu jest dosyć toporne . Jakaś rada jak to zrobić ? na razie nie mam pomysłu
komentarz 30 listopada 2017 przez Tomasz90 Nałogowiec (25,140 p.)

dlaczego toporne? te obiekty przechowujesz w jakiejś tablicy/liście

Powinieneś sobie stworzyć np. listę

List<Student> students = new ArrayList<>();

i dodać do niej wszystkich uczniów

students.add(new Student("Kowalski", 39, 22)); 
itd.

Następnie w pętli operować na tej liście

Najlepiej jakbyś pokazał swój kod

komentarz 30 listopada 2017 przez Patryk Kirszenstein Bywalec (2,400 p.)
edycja 30 listopada 2017 przez Patryk Kirszenstein
Napisałem tyle . Wszystko działa jestem otwarty na rady :) 
package matura;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {


	public static void main(String[] args) {

		uczniowie Kowalski =new uczniowie("Kowalski",39,22);
		uczniowie Nowak= new uczniowie("Nowak",49,35);
		uczniowie Nowicka =new uczniowie("Nowicka",97,60);
		uczniowie Janik =new uczniowie("Janik",88,50);
		uczniowie Król =new uczniowie("Król",11,35);
		uczniowie Polak =new uczniowie("Polak",80,60);
		uczniowie Witecka= new uczniowie("Witecka",91,93);
		uczniowie Lipiec =new uczniowie("Lipiec",70,55);
		uczniowie Brzeski= new uczniowie("Brzeski",44,80);
		uczniowie Darecki= new uczniowie("Darecki",88,68);

		ArrayList<uczniowie> uczniowie = new ArrayList<uczniowie>();
		uczniowie.add(Kowalski);
		uczniowie.add(Nowak);
		uczniowie.add(Nowicka);
		uczniowie.add(Janik);
		uczniowie.add(Król);
		uczniowie.add(Polak);
		uczniowie.add(Witecka);
		uczniowie.add(Lipiec);
		uczniowie.add(Brzeski);
		uczniowie.add(Darecki);
		int z=0;
		int min=100;
		int maks=0;
		int odp=0;
		int odp2 = 0;


		Scanner sc = new Scanner(System.in);
		odp2=sc.nextInt();
		switch(odp2) {
		case 1: 
			//matura polski
			for(int i=0; i < uczniowie.size(); i++) {
				if(uczniowie.get(i).getJp()>30) {
					System.out.print("Uczeń :   ");
					System.out.print(uczniowie.get(i).getNazwisko());
					System.out.println("   Zdal z polskiego");}}
			//obie matury 

			for(int i=0; i < uczniowie.size(); i++) {
				if(uczniowie.get(i).getJp()>30 && uczniowie.get(i).getMat()>30) {
					System.out.print("uczen: ");
					System.out.print(uczniowie.get(i).getNazwisko());
					System.out.println("  Zdal mature!");}}

			for(int i=0; i < uczniowie.size(); i++) {
				if(uczniowie.get(i).getJp()>90 || uczniowie.get(i).getMat()>90) {
					System.out.print("uczen: ");
					System.out.print(uczniowie.get(i).getNazwisko());
					System.out.println("  Zdobyl min 90 z matury");}}



			for(int i=0; i < uczniowie.size(); i++) {
				if(uczniowie.get(i).getJp()<90 || uczniowie.get(i).getMat()<90) {
					System.out.print("uczen:  ");
					System.out.print(uczniowie.get(i).getNazwisko());
					System.out.println("   nie zdal");}}
			main(args); 
			break;
		case 2:

			//najgorszy z polskiego
			for(int i=0; i < uczniowie.size(); i++) {
				if(uczniowie.get(i).getJp()<maks ) {
					maks=uczniowie.get(i).getJp();
					odp=i;
				}
			};
			System.out.println(uczniowie.get(odp).getNazwisko()+uczniowie.get(odp).getJp()+uczniowie.get(odp).getMat());

			//najlepszy z matmy
			for(int i=0; i < uczniowie.size(); i++) {
				if(uczniowie.get(i).getMat()>maks ) {
					maks=uczniowie.get(i).getMat();
					odp=i;}
			};

			System.out.println(uczniowie.get(odp).getNazwisko()+uczniowie.get(odp).getJp()+uczniowie.get(odp).getMat());
			main(args); 
			break;

		case 3:
			for(int i=0; i < uczniowie.size(); i++) {
				
					maks+=uczniowie.get(i).getJp();
					odp+=maks=uczniowie.get(i).getMat();}//tu wziałem stare nazwy zmiennych aby nie robic dodatkowych
			odp=odp/uczniowie.size();
			maks=maks/uczniowie.size();
			System.out.println("Srednia ocen z matematyki:"+maks+"Srednia ocen z j.p"+odp);
			main(args); 
			break;

		case 4:
			  int temp = 0;  
System.out.println("Podaje informacje wedle klasyfikacji punktowej z polskiego");
			 for(int i=0; i < uczniowie.size(); i++){  
                for(int j=1; j < (uczniowie.size()-i); j++){  
                	if (uczniowie.get(j-1).getJp() > uczniowie.get(j).getJp()){  
                           //swap elements  
                           temp = uczniowie.get(j-1).getJp();  
                           uczniowie.get(j-1).setJp(uczniowie.get(j).getJp());
                           uczniowie.get(j).setJp(temp);  
                   }  
                    
			}
            	uczniowie.get(i).all();
			 
			 }System.out.println("Podaje informacje wedle klasyfikacji punktowej z matematyki");
                for(int i=0; i < uczniowie.size(); i++){  
                    for(int j=1; j < (uczniowie.size()-i); j++){  
                    	if (uczniowie.get(j-1).getMat() > uczniowie.get(j).getMat()){  
                               //swap elements  
                               temp = uczniowie.get(j-1).getMat();  
                               uczniowie.get(j-1).setMat(uczniowie.get(j).getMat());
                               uczniowie.get(j).setMat(temp);  
                       }  
                        
    			}
                	uczniowie.get(i).all();
                
                }
               
			main(args); 
			break;



		}}}

 

 

 

 

package matura;

public class uczniowie {
	private String nazwisko;
	private int jp,mat;
	public uczniowie(String nazwisko, int jp ,int mat) {
		this.setJp(jp);
				this.setMat(mat);
	  this.setNazwisko(nazwisko);
	}
	public String getNazwisko() {
		return nazwisko;
	}
	public void setNazwisko(String nazwisko) {
		this.nazwisko = nazwisko;
	}
	public int getMat() {
		return mat;
	}
	public void setMat(int mat) {
		this.mat = mat;
	}
	public int getJp() {
		return jp;
	}
	public void setJp(int jp) {
		this.jp = jp;
	}
	public void  all() {
		System.out.println("Uczen: "+nazwisko+"Zdobyl "+jp+" Punktow z jezyka polskiego oraz "+mat+" Punktów z matematki");
	}

}

 

komentarz 30 listopada 2017 przez Patryk Kirszenstein Bywalec (2,400 p.)
package matura;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {


	public static void main(String[] args) {

		uczniowie Kowalski =new uczniowie("Kowalski",39,22);
		uczniowie Nowak= new uczniowie("Nowak",49,35);
		uczniowie Nowicka =new uczniowie("Nowicka",97,60);
		uczniowie Janik =new uczniowie("Janik",88,50);
		uczniowie Król =new uczniowie("Król",11,35);
		uczniowie Polak =new uczniowie("Polak",80,60);
		uczniowie Witecka= new uczniowie("Witecka",91,93);
		uczniowie Lipiec =new uczniowie("Lipiec",70,55);
		uczniowie Brzeski= new uczniowie("Brzeski",44,80);
		uczniowie Darecki= new uczniowie("Darecki",88,68);

		ArrayList<uczniowie> uczniowie = new ArrayList<uczniowie>();
		uczniowie.add(Kowalski);
		uczniowie.add(Nowak);
		uczniowie.add(Nowicka);
		uczniowie.add(Janik);
		uczniowie.add(Król);
		uczniowie.add(Polak);
		uczniowie.add(Witecka);
		uczniowie.add(Lipiec);
		uczniowie.add(Brzeski);
		uczniowie.add(Darecki);
		int z=0;
		int min=100;
		int maks=0;
		int odp=0;
		int odp2 = 0;


		Scanner sc = new Scanner(System.in);
		odp2=sc.nextInt();
		switch(odp2) {
		case 1: 
			//matura polski
			for(int i=0; i < uczniowie.size(); i++) {
				if(uczniowie.get(i).getJp()>30) {
					System.out.print("Uczeń :   ");
					System.out.print(uczniowie.get(i).getNazwisko());
					System.out.println("   Zdal z polskiego");}}
			//obie matury 

			for(int i=0; i < uczniowie.size(); i++) {
				if(uczniowie.get(i).getJp()>30 && uczniowie.get(i).getMat()>30) {
					System.out.print("uczen: ");
					System.out.print(uczniowie.get(i).getNazwisko());
					System.out.println("  Zdal mature!");}}

			for(int i=0; i < uczniowie.size(); i++) {
				if(uczniowie.get(i).getJp()>90 || uczniowie.get(i).getMat()>90) {
					System.out.print("uczen: ");
					System.out.print(uczniowie.get(i).getNazwisko());
					System.out.println("  Zdobyl min 90 z matury");}}



			for(int i=0; i < uczniowie.size(); i++) {
				if(uczniowie.get(i).getJp()<90 || uczniowie.get(i).getMat()<90) {
					System.out.print("uczen:  ");
					System.out.print(uczniowie.get(i).getNazwisko());
					System.out.println("   nie zdal");}}
			main(args); 
			break;
		case 2:

			//najgorszy z polskiego
			for(int i=0; i < uczniowie.size(); i++) {
				if(uczniowie.get(i).getJp()<maks ) {
					maks=uczniowie.get(i).getJp();
					odp=i;
				}
			};
			uczniowie.get(odp).all();

			//najlepszy z matmy
			for(int i=0; i < uczniowie.size(); i++) {
				if(uczniowie.get(i).getMat()>maks ) {
					maks=uczniowie.get(i).getMat();
					odp=i;}
			};

			uczniowie.get(odp).all();
			main(args); 
			break;

		case 3:
			for(int i=0; i < uczniowie.size(); i++) {

				maks+=uczniowie.get(i).getJp();
				odp+=uczniowie.get(i).getMat();}//tu wziałem stare nazwy zmiennych aby nie robic dodatkowych
			odp=odp/uczniowie.size();
			maks=maks/uczniowie.size();
			System.out.println("Srednia ocen z matematyki:"+maks+"\n Srednia ocen z j.p "+odp);
			main(args); 
			break;

		case 4:
			int temp = 0;  
			System.out.println("Podaje informacje wedle klasyfikacji punktowej z polskiego");
			for(int i=0; i < uczniowie.size(); i++){  
				for(int j=1; j < (uczniowie.size()-i); j++){  
					if (uczniowie.get(j-1).getJp() > uczniowie.get(j).getJp()){  
						//swap elements  
						temp = uczniowie.get(j-1).getJp();  
						uczniowie.get(j-1).setJp(uczniowie.get(j).getJp());
						uczniowie.get(j).setJp(temp);  
					}  

				}
				uczniowie.get(i).all();

			}System.out.println("Podaje informacje wedle klasyfikacji punktowej z matematyki");
			for(int i=0; i < uczniowie.size(); i++){  
				for(int j=1; j < (uczniowie.size()-i); j++){  
					if (uczniowie.get(j-1).getMat() > uczniowie.get(j).getMat()){  
						//swap elements  
						temp = uczniowie.get(j-1).getMat();  
						uczniowie.get(j-1).setMat(uczniowie.get(j).getMat());
						uczniowie.get(j).setMat(temp);  
					}  

				}
				uczniowie.get(i).all();

			}

			main(args); 
			break;
default:
	System.out.println("Do widzenia!");
			break;
			


		}}}



Jeszcze mały edit wyglądu

 

1
komentarz 1 grudnia 2017 przez Tomasz90 Nałogowiec (25,140 p.)
Dam Ci takie wskazówki (ogólnie tak jak napisałem można to na streamach zrobić i będzie dużo szybciej ale najpierw tak jak robisz spróbuj skończyć):

ad. 1) w 1a i 1b masz złą nierówność (powinna być ostra), a w 1d jest całkiem źle bo oni mają mieć poniżej 30 pkt z przynajmniej jednej matury

ad. 2) jest zrobiony na odwrót

ad. 4) są lepsze sposoby sortowania niż bąbelkowe (należało wykorzystać metodę sort() z klasy Collections)

Tyle mam uwag co do zadań a teraz uwagi co do kodu których będzie wiecej:

- powinno się używać angielskiego nazewnictwa a więc Student (instancja klasy przechowuje informacje o jednym uczniu) a nie uczniowie (w dodatku nazwy klas pisze się z dużej litery)

- od tekstowej reprezentacji obiektu jest metoda toString(), którą należy przesłonić (u Ciebie jest jakieś all() )

- sensowne nazwy zmiennych i nie używanie jednej zmiennej do kilku rzeczy które robią co innego (np. bezsensowne użycie zmiennej maks w przypadku obliczania minimum)

 - listę tworzysz tak jak napisałem (po lewej zwykle się używa interfejsu bo można zawsze podmienic implementację, a po prawej od Javy 7 nie trzeba podawać typu - wystarczy <>)

- te poszczególne pętle to lepiej było zrobić w jakichs metodach bo tak to trzeba sie zastanawiac co kilka linijek robi

- warunki z tych if-ów też mozna do osobnych metod przenieść bo zawsze to czytelniej

- jak tego najlepszego i najgorszego ucznia szukasz w drugi punkcie to wystarczy tymczasowa referencja do obiektu którego szukamy a nie 2 zmienne

 

Ogólnie to polecam do przeczytania książke "Czysty kod", bo można się dużo nauczyć z niej.
komentarz 1 grudnia 2017 przez Patryk Kirszenstein Bywalec (2,400 p.)
Mam czysty kod i mistrz czystego kodu dziękuje za propozycje:)  a co do tej zmiennej maks to fakt moje przeuczenie nawet dałem sobie komentarz bo potem chciałem to zmienić ale zapomniałem :P O tym toString() nie wiedziałem co do metod z pentlą i ifem to myslałem nad tym ale nie wiedziałem jak to zrobic w oparciu o kolekcje a co do listy to kurcze nie działało mi i zmieniłem na arraylist bo to akurat działało. Co do lepszych metod sortowania to znam ich bardzo dużo i co do algorytmów trochę wiem tylko zacząłem od quicka a nie miałem pomysłu jak ręcznie wyciągnąć dane z każdego obiektu z klasy tak żeby działało i sortowało całe obiekty a nie tylko wyniki więc zrobiłem prosty bąbelkowy tak żeby działało . W sumie teraz myślę że Select sort wiedziął bym jak zrobić. Do  poprawy błędów już się zastosowałem dziękuje za pomoc  :)
1
komentarz 1 grudnia 2017 przez Tomasz90 Nałogowiec (25,140 p.)
edycja 1 grudnia 2017 przez Tomasz90

To teraz pasuje przeczytać :) Co do tego sortowania to sprawdź sobie interfejsy Comparable i Comparator. Nie musisz pisać własnych algorytmów, a jedynie zdefiniować jak porównywać obiekty. Tutaj masz tutorial:

https://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/

a teraz porównaj sobie to z tym jak w Javie 8 można to czwarte zadanie zrobić :D ( drugi podpunkt analogicznie)

students.stream().sorted(Comparator.comparing(Student::getPolishExamPoints).reversed()).forEach(System.out::println);

 

komentarz 2 grudnia 2017 przez Patryk Kirszenstein Bywalec (2,400 p.)
czysta magia ! Jeszcze dużo nauki przede mną :D W sumie nie wiem co tam się zadziało zbytnio nawet :P

Podobne pytania

0 głosów
1 odpowiedź 808 wizyt
pytanie zadane 22 października 2018 w Java przez Akki Nowicjusz (170 p.)
0 głosów
0 odpowiedzi 129 wizyt
pytanie zadane 16 marca 2018 w C i C++ przez CurryMan Nowicjusz (170 p.)
0 głosów
1 odpowiedź 122 wizyt
pytanie zadane 9 maja 2020 w C i C++ przez Piesel Wojownik Nowicjusz (140 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...