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

Największa liczba w tablicy dwuwymiarowej.

Object Storage Arubacloud
0 głosów
785 wizyt
pytanie zadane 14 października 2015 w Java przez natrov Gaduła (3,970 p.)

Witam,

pomógłby mi ktoś w wyznaczeniu najwiekszej liczby z tablicy dwuwymiarowej? :) Wraz z opisem, dlaczego tak a nie inaczej :)

Wejście: String imie int ocena_1 int ocena_2 int ocena_3 tzn. Roman 5 2 4

Program Wpiuje w tablicy dwuwymiarowej tzn. tab[0][0] = imie; tab [0][1] = srednia ocen;

Teraz pytanko do Was jak sparwdzić kto ma najwiekszą srednią z podanych osób? :)

package projekt_2;

import java.util.Scanner;

public class Liczby {

	public static void main(String[] args) {
		Scanner obiekt = new Scanner(System.in);	
		String tablica[][] =  new String[3][2];
		
		for (int i = 0; i < tablica.length; i++) {
			String ciag_znakow = obiekt.nextLine();
			String tab[] = null;
			tab = ciag_znakow.split(" ");
			
			String imie = tab[0];

			int oc_1 = Integer.parseInt(tab[1]);
			int oc_2 = Integer.parseInt(tab[2]);
			int oc_3 = Integer.parseInt(tab[3]);
			
			double sr = (oc_1 + oc_2 + oc_3) / 3;
			for (int j = 0; j < tablica[i].length; j++) {
				tablica [i] [j] = imie;
				
			}
			for (int j = 1; j < tablica[i].length; j++) {
				tablica [i] [j] = Double.toString(sr);
				
			}
		}
		
		for (int i = 0; i < tablica.length; i++) {
			for (int j = 0; j < tablica[i].length; j++) {
				System.out.println(tablica [i] [j]);
				
			}
		}
		
	
	}

}

 

1 odpowiedź

+1 głos
odpowiedź 14 października 2015 przez furas Maniak (53,800 p.)
wybrane 14 października 2015 przez natrov
 
Najlepsza

Najpierw przyjmujesz, że nie wiesz kto ma największą ocenę

ocena_max = 0; 
osoba_max = "";

Potem w pętli dla kolejnych `i` sprawdzasz czy `tab[ i ] [1]` jest większe od `ocena_max`. Jeśli tak to zapamiętujesz to jako 

ocena_max = tab[ i ][1]; 
osoba_max = tab[ i ][0];

 i kontynujesz pętlę.

Po wyjściu z pętli masz wynik w `ocena_max` i `osoba_max`.

Można też zapamiętywać `i_max` jeśli chcesz wiedzieć, pod jakim numerem jest ta osoba.


---

Prawdę mówiąc można by to robić nawet w pętli na etapie wczytywania danych bez potrzeby przechowywania wszystkich danych w tablicy.

komentarz 14 października 2015 przez natrov Gaduła (3,970 p.)

Wykonałem tak jak opisałeś lecz coś nie działa. Spojrzysz? :)

int ocena_max = 0; 
		String osoba_max = "";

		for (int i = 0; i < tablica.length; i++) {
			int a = Integer.parseInt(tablica[ i ][1]);
			if(a > ocena_max)
			{
				ocena_max = a;
				osoba_max = tablica[ i ][0];
			}
		}
		System.out.println(ocena_max);

 

Error: 

Robert 1 2 3 
Mikołaj 6 6 6
Exception in thread "main" java.lang.NumberFormatException: For input string: "2.0"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at projekt_2.Liczby.main(Liczby.java:36)

 

komentarz 14 października 2015 przez furas Maniak (53,800 p.)

Zapisujesz średnią jako napis typu Double czyli np. "2.0"

tablica [i] [j] = Double.toString(sr);

a teraz próbujesz odczytać Integer czyli np. "2"

int a = Integer.parseInt(tablica[ i ][1]);

---

W sumie nie wiem po co zamieniasz średnią na tekst zamiast zostawić jako Double

tablica [i] [j] = sr;

Nie trzeba by było ponownie zamieniać z tekstu na liczbę 
a z wypisaniem też nie powinno być problemu (bez potrzeby zamiany na tekst)

System.out.println( 3.1415 );

---

Tak patrzę dokładniej na kod i zamiast tych pętli `for`

            for (int j = 0; j < tablica[i].length; j++) {
                tablica [i] [j] = imie;
                 
            }
            for (int j = 1; j < tablica[i].length; j++) {
                tablica [i] [j] = Double.toString(sr);
                 
            }

można by zrobić tylko zwykłe przypisanie

 

            tablica [i] [0] = imie;
                 
            tablica [i] [1] = sr;

 

komentarz 14 października 2015 przez natrov Gaduła (3,970 p.)
Muszę zamienić wszystkie dane na tekst, gyż przechowuje także imiona uczniów. ;(

A potem średnią przekonwertować znowu na jakeigoś doubla :)
komentarz 14 października 2015 przez furas Maniak (53,800 p.)
Oj zapomniał, że to nie Python, w którym mogę w tablicy (a właściwie liście) przechowywać dane różnego typu :)

W takim przypadku rozpatrzył bym dwa rozwiązania:

- dwie osobne tablice - w jednej imiona a w drugiej średnie jako double

- klasa Uczen zawierająca imię i średnią ocenę, i tablica obiektów typu Uczen.
komentarz 14 października 2015 przez natrov Gaduła (3,970 p.)
Do obiektówki kiedyś dojdę, narazie muszę podskillować podstawy :)

Dzięki za wskazówki które mi podałeś. Przydało się. Działa !!! :)

Podobne pytania

0 głosów
1 odpowiedź 1,669 wizyt
0 głosów
0 odpowiedzi 358 wizyt
pytanie zadane 31 grudnia 2015 w C i C++ przez Moonshine Mądrala (6,360 p.)
0 głosów
2 odpowiedzi 291 wizyt
pytanie zadane 12 października 2015 w C i C++ przez Mateep Użytkownik (850 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...