sortowanie tablic wielowymiarowych

0

prosze o pomoc jestem zdesperowana
siedze przy tym algorytmie od dwoch dni i nie moge sobie dac rady
za zadanie mam stworzyc program w konsoli
ktory przyjmuje dane nazwisko, imie, punkty z pisemenego testu, punkty z ustnego testu i policzy mi procent od ustny + pisemny (max punktow z obydwu razem to 100) i doda go do tablicy w ostatniej kolumnie
program powinien wyswietlac 2 listy
pierwsza lista wzgledem nazwiska od a do z
druga wzgledem punktow otrzymanych z obliczenia ustny + pisemny od najwiekszej liczby pkt do najmniejszej
nie jestem w stanie posortowac tablicy uczniowie[][].charAr()
program musi byc napisany tylko za pomoca tablic a nie "compare to" (znalazlam to w internecie)
probowalam juz chyba wszystkiego
prosze o wyrozumialosc jestem poczatkujaca

import java.util.Scanner;

public class Main 
{
	public static String toStrin (double  a)
	 {
		String resultatFinal =  Double.toString(a);
		return resultatFinal;
	 }
	
	
	public static void main(String[] args) throws NumberFormatException,StringIndexOutOfBoundsException,ArrayIndexOutOfBoundsException
	{
		
		Scanner in = new Scanner(System.in);
		System.out.println("podaj ilosc osob i nacisnij enter'");
		
		
		
		int longTablo = Integer.parseInt(in.next());
		String[] nomDeDonne = {"nazwisko","imie","ustny","pisemny","wynik"};
		
	    String[][] uczniowie = new String[longTablo ][nomDeDonne.length + 1];
		int procent = 100;
		double pisemny = 0;  
		double ustny = 0;
		double resultat =0;
		
		
		try
		{
		 for(int i=0; i <uczniowie.length; i++)
		 { 
			 
	            for(int j=0; j <uczniowie[i].length; j++) 
	            {	
	            	if(j < 4)
	            	{
		            	System.out.print("tapez " + nomDeDonne[j] + " du stager et appyez entre : ");
		            	uczniowie[i][j] = in.next();
	            	}
	            }
	            System.out.println(); 
	            
	            pisemny = Double.parseDouble(uczniowie[i][2]);
	            ustny = Double.parseDouble(uczniowie[i][3]);
	            resultat = ((pisemny + ustny)/100) * 100;
	            uczniowie[i][4] = toStrin(resultat);
      
	     }
		}catch( NumberFormatException e)
		{
			
		}
		in.close();
		

		for(int i = 0; i < uczniowie.length; i++)
		 { 
		 
            for(int j = 0; j < (uczniowie[i].length - 1); j++) // passage par les columns
            {
            	System.out.print( uczniowie[i][j] + " ");
            }
            System.out.println();
		 }
		
		String[][] uczniowieParNom = new String[uczniowie.length][nomDeDonne.length];

		String[][] uczniowieByNom = new String[longTablo ][nomDeDonne.length + 1];
		
	 try
	 {
		 int help = 0;
			for(int i = 0; i <= uczniowie.length; i++)
			{
				for(int j = (uczniowie.length ); j <= uczniowie[i].length; --j)
				{
					System.out.println("lala");
					help++;
											
					 if(uczniowie[j - 1][0].charAt(0) > uczniowie[j][0].charAt(0) )
					 {
						 System.out.println("lala");
						 uczniowieByNom[i][help] = uczniowie[j -1][help];
						 System.out.print(uczniowieByNom[i][help] = uczniowie[j -1][help]);  //delete
						 uczniowie[j -1][help] = uczniowie[j][help];
						 System.out.print(uczniowieByNom[i][help] = uczniowie[j -1][help]);   //delete
						 uczniowie[j][help] = uczniowieByNom[i][help];
						 System.out.print(uczniowieByNom[i][help] = uczniowie[j -1][help]); //delete
					 }
				}
				System.out.println();
				help = 0;
			}
	  for(int k = 0; k <= uczniowie.length; k++)
	  {
		  for(int j = 0; j <= uczniowie[k].length; j++)
		  {
			  System.out.print(uczniowie[k][j] + "||| ");
		  }
		  System.out.println();
	  }		
	}
	catch(StringIndexOutOfBoundsException e)
	{
		
	}
	catch(ArrayIndexOutOfBoundsException e)
	{	
	}
	}
	 
}
0
  1. NIGDY nie zostawiaj pustych catch! IDE wygenerowało ci je z zawartością i powinnaś ją zostawić...
  2. Musisz używać tutaj tablic? Nie możesz kolekcji?
0

tak jestem skazana na tablice :(
wiem ze latwiej by bylo zrobic to z uzyciem kolekcji
ale mialam podkreslone ze musze uzyc tablic i jestem zgubiona
dzieki za rade co do pustych catch
bede pamietac

0

Dobra to lecimy dalej:

  1. Czy możesz to upakować w klasy? Bo w ten sposób w który próbujesz to zrobić to nie ma szans na powodzenie. Zrób klasę Osoba czy tam Uczen i zapakuj do niej wszystkie dane. Będzie to dużo łatwiej ogarnąć.
  2. Z zasady kod pisze się po angielsku. U ciebie masz angielski, polski i francuski. To bardzo źle, bo kod jest przez to nieczytelny.
  3. Jeden wielki blok kodu jest bardzo nieczytelny. Powinnaś go podzielić na mniejsze funkcje. IDE posiada takie możliwości. Zaznacz kawałek kodu, kliknij prawym i daj "source->extract method" ;]
0

przepraszam za kilkojezyczny kod
powinnam to porawic
po prostu uczylam sie kilku innych jezykow i od kad przeszlam na informatyke to nie mam kompletnie czasu na powtorki
prblem jest taki ze powinnam to zrobic wszystko w 1 algorytmie bez uzywania klas
jezeli twierdzisz ze to z gory skazane na porazke to jestem w opalach

0

Moim zdaniem polecenia w zadaniu są nierozsądne - wymuszają szukania skomplikowanych sposobów zamiast stosowania istniejących prostych.
Spróbuj może tak, utwórz dodatkową tablicę nazwiska z zawartością nazwisko.toUpper()+indeks_w_tablicy_uczniowie, i posortuj ją. Przy jej pomocy bez problemu wyświetlisz tablicę uczniowie w kolejności alfabetycznej.
Sugeruję też zmianę nazwy metody, z toStrin na toString.

0

nie bardzo wiem jak posortowac to wszystko
wiem ze powinnam przepisac od nowa caly ten kod
zbyt go skomplikowalam
to przez to ze od trzech dni probuje to zrobic i z kazda modifikacja komplikuje go co raz bardziej

String[] nazwiska = new String[longTablo - 1];
		String dane;
		int pomocnicza = 0;
try
		{
		 for(int i=0; i <stagers.length; i++)
		 { 
			
	            for(int j=0; j <stagers[i].length; j++) // passage par les columns
	            {	
	            	if(j < 4)
	            	{
	            		pomocnicza++;
		            	System.out.print("tapez " + nomDeDonne[j] + " du stager et appyez entre : ");
		            	 dane = in.next();
		            	 stagers[i][j] = dane;
		            	 if(j == 0)
		            	 {
		            		 nazwiska[i] = dane.toUpperCase();  
		            		 pomocnicza = i;
		            		 stagers[i][5] = toString(pomocnicza);
		            	 }
		            	 
		            	 
	            	}
	            	
	            	//System.out.print("donnes du stager nr : " + i+1 );
	            }
	            System.out.println(); // Fin de column novel line
	            
	            ecrit = Double.parseDouble(stagers[i][2]);
	            oral = Double.parseDouble(stagers[i][3]);
	            resultat = ((ecrit + oral)/100) * 100;
	            stagers[i][4] = toString(resultat);
      System.out.println(stagers[i][0]);
	     }

nie wiem zbytnio jak to puzniej posortowac :(
nie znalazlam nic na temat sortowania tablic wielowymiarowych

0

usunelam prze przypadek ostatni post
przepraszam

0

sprobuje to zrobic za pomoca zwyklych tablic
mieliscie racje:)

1

Sugerowałem takie rozwiązanie:

String[][] uczniowie = new String[longTablo ][nomDeDonne.length + 1];
String[] nazwiska = new String[longTablo]; //pomocnicza tablica
//wczytywanie
for(int i=0; i < longTablo; i++)
{ 
      for(int j=0; j <uczniowie[i].length; j++) 
      {        
           if(j < 4)
           {
                 System.out.print("tapez " + nomDeDonne[j] + " du stager et appyez entre : ");
                 uczniowie[i][j] = in.next();
           }
           //zakładam, że nikomu nie przyjdzie do głowy wpisywanie na konsoli więcej niż 1000 uczniów, String.format("%3s",5) = "  5" 
           nazwiska[i] = uczniowie[i][0].toLowerCase()+String.format("%3s",i);
           ... 
      }
}
...
//posortowanie pomocniczej tablicy
Arrays.sort(nazwiska);
//wypisanie w kolejności alfabetycznej
for(int i=0;i<longTablo;i++)
{
     int k = Integer.parseInt(nazwiska[i].substring(nazwiska[i].length()-3,nazwiska[i].length()).trim());
     for(int j = 0; j <= uczniowie[k].length; j++)
     {
           System.out.print(uczniowie[k][j] + "||| ");
     }
     System.out.println();     
}
0

oki wszystko rozumiem :) :)
nie jestem zadowolona z siebie poniewaz daliscie mi gotowca
lecz sa i dobre strony zyskalam czas do wieczora zeby zaczac powtorki i od nowa uczyc sie podstaw poniewaz zdalam sobie sprawe ze tego brakuje mi najbardziej
dziekuje wam wszystkim
a szczegolnie tobie bogdans

UWAZAM WATEK ZA ZAMKNIETY :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1