Wyświetlanie minimalnej wartości z każdej kolumny

0

Cześć,
chciałbym aby funkcja getMin zwracała tablicę zawierającą najmniejsze wartości z poszczególnych kolumn tablicy, ale nie działa to tak jak bym chciał. Co może być nie tak?

package Zadania3;

import java.util.Random;

public class Zadanie4 {

	public static void main(String[] args) {
		
		generateTab(); //wygenerowanie tablic [x] [y]
		displayTab(generateTab()); //wyswietlenie tablicy
		
		System.out.println("--------------------------------");
		
		displayMin(getMin(generateTab()));
		
		

}

	
	public static int[][] generateTab() {
		
		int[][] tab = new int[5][5];
		Random r = new Random();
		
		for(int y=0; y<5;y++) {
			for(int x=0; x<5; x++) {
				tab[x][y] = r.nextInt(11)-5;
			}
		}
		return tab;
	}
	
	public static int[] getMin(int tab[][]) {
		
		int[] minTab = new int[5];
		int min = 99999999;
		
		
		for(int y=0; y<5; y++) { 
			min = 999999999;
			for(int x=0;x<5;x++) { 
				if (tab[x][y] < min) {
					min=tab[x][y];
					minTab[y]=min;
				}
			}
		}
		return minTab;
	}

	public static void displayTab(int tab[][]){
		for (int y=0; y<5; y++) {
			for (int x=0; x<5; x++) {
				System.out.print(tab[x][y] + " ");
			}
			System.out.println();
		}
	}

	public static void displayMin(int tab[]) {
		for (int x=0; x<5; x++) {
			System.out.print(tab[x] + " ");
		}
		System.out.println();
	}
}


1

Twój program liczy minima, ale wierszy.

Jakkolwiek, zamień po prostu x z y w pętli i masz.

for(int x=0; x<5; x++) {
     min = 999999999;// można użyć `Integer.MAX_VALUE`
     for(int y=0;y<5;y++) { 
         if (tab[x][y] < min) {
              min=tab[x][y];
              minTab[x]=min;
         }
    }
}
0

@jarekr000000: Zamieniłem, ale otrzymałem wynik, który nie zgadza mi się ani dla wierszy ani dla kolumn niestety:

3  0  4  4  0 
0  4 -4 -3 -5 
0 -1 -5 -3 -1 
0  4  0  3 -2 
2 -4  1  2  0 
--------------------------------
3 -4 0 -3 -4

Kod po zmianie:

package Zadania3;

import java.util.Random;

public class Zadanie4 {

	public static void main(String[] args) {
		
		generateTab(); //wygenerowanie tablic [x] [y]
		displayTab(generateTab()); //wyswietlenie tablicy
		
		System.out.println("--------------------------------");
		
		displayMin(getMin(generateTab()));
		
		

}

	
	public static int[][] generateTab() {
		
		int[][] tab = new int[5][5];
		Random r = new Random();
		
		for(int y=0; y<5;y++) {
			for(int x=0; x<5; x++) {
				tab[x][y] = r.nextInt(11)-5;
			}
		}
		return tab;
	}
	
	public static int[] getMin(int tab[][]) {
		
		int[] minTab = new int[5];
		int min = Integer.MAX_VALUE;
		
		
		for(int x=0; x<5; x++) { 
			min = 999999999;
			for(int y=0;y<5;y++) { 
				if (tab[x][y] < min) {
					min=tab[x][y];
					minTab[y]=min;
				}
			}
		}
		return minTab;
	}
	
	public static void displayTab(int tab[][]){
		for (int y=0; y<5; y++) {
			for (int x=0; x<5; x++) {
				System.out.print(tab[x][y] + " ");
			}
			System.out.println();
		}
	}

	public static void displayMin(int tab[]) {
		for (int x=0; x<5; x++) {
			System.out.print(tab[x] + " ");
		}
		System.out.println();
	}
}

0

Nie zmieniłeś dokładnie.

minTab[y]=min; vs minTab[x]=min;

0

@jarekr000000: Racja, niestety dalej coś jest nie tak.

2 4 0 2 -5 
-5 -2 -1 -5 3 
4 3 5 -5 2 
3 -3 -5 4 -5 
-5 4 -2 4 3 
--------------------------------
-5 1 -5 -3 -5 

2

Dziwne. U mnie działa.

1 -5 -1 0 4 
4 2 -2 -1 0 
-3 2 5 4 1 
-5 -4 1 -4 5 
-5 -4 1 -1 1 
--------------------------------
-5 -5 -2 -4 0 

To jest dla dobrego Randoma czyli 107 - popraw sobie.

https://www.onlinegdb.com/f8TFNa-tw

1

Przecież ten kod generuje 3x tablicę losową.

generateTab(); // <--- tu 
displayTab(generateTab()); // <--- tu 

System.out.println("--------------------------------");

displayMin(getMin(generateTab())); // <--- i tu 
0

Poprawiłem i działa:

	public static void main(String[] args) {
		
		int[][] tab = generateTab(); //wygenerowanie tablic [x] [y]
		
		displayTab(tab); //wyswietlenie tablicy
		
		System.out.println("--------------------------------");
		
		displayMin(getMin(tab));

}

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