Przeszukiwanie na ukos tablicy dwuwymiarowej.

0

Witam,

mam problem z utworzeniem metody, która ma za zadanie przeszukać dowolną tablicę dwuwymiarową pod kątem występowania tablicy char'ów 'a' 'l' 'a' (na ukos).

Teoretycznie wiem, jak to powinno wyglądać, jednak mam problem z zapisem tego złożonego problemu.

0

Jeśli to jest złożony problem, to sieci neuronowe muszą istnieć w zupełnie innym wymiarze :)
Rozłóż problem na części pierwsze - tak jak gdybyś rozwiązywał zadanie z matmy: dane, szukane, napisz kilka przykładów na kartce, rozwiąż je sobie i zobacz czy coś Ci przyjdzie na myśl.
Jeśli nie, pokaż to, do czego doszedłeś; jeśli tak - problem z głowy.

0

Coś w ten deseń ?

public static void ukos(char[][] tab) {
	
		int count = 0;
		for(int i =0;i<tab.length;i++){
			for(int j = i+2;j<tab[i].length;j++){
				if(tab[i][j] == 'a' && tab[i+1][j-1]=='l'&&tab[i+2][j-2]=='a')
					count++;
			}
		}
		System.out.println("Ala ukos / wystapila " + count);
}


1

Sporo błędów i usterek:

  • przekraczasz zakres tablicy,
  • na ukos, to (w dół i w lewo) lub (w dół i w prawo), Ty sprawdzasz tylko jeden kierunek,
  • szukasz tekstu ala a wypisujesz komunikat o tekście Ala,
  • rozdzielaj odpowiedzialność, funkcja która szuka, nie wyświetla komunikatów,
  • przerób cały kod tak by funkcja nie musiała być static.
public int ukos(char[][] tab){
     int count = 0;
     ...
     return count;
}
0
public static int ukos(char[][] tab) {

		int count = 0;
		for (int i = 0; i < tab.length - 2; i++) {
			for (int j = 2; j < tab[i].length - 2; j++) {
				if ((tab[i][j] == 'a' && tab[i + 1][j - 1] == 'l' && tab[i + 2][j - 2] == 'a')
						|| (tab[i][tab.length - j] == 'a' && tab[i + 1][tab.length - j + 1] == 'l'
								&& tab[i + 2][tab.length - j + 2] == 'a')) {
					count++;
				}

			}
		}
		return count;
	}

0

Dla tablicy 3x3 Twoja pętla przybierze postać

for(int i = 0; i < 1; i++)
    for(int j = 2; j < 1; j++)

Kod w pętli nie wykona się zatem ani razu.
Jeśli j jest małe (0 lub 1), to sprawdzaj tylko ukosy w prawo - z rosnącym j.
Jeśli j jest duże (tab[i].length-1 lub tab[i].length-2), to sprawdzaj tylko ukosy w lewo - z malejącym j.
Dla pozostałych j sprawdzaj oba ukosy.

0

Nie wiem w tym momencie jak to poprawnie zapisać ..

2
    private static int countOnDiagonals(char[][] tab){
        int counter = 0;
        for(int row = 0;row<tab.length-2;row++){
            for(int col=0;col<tab[row].length;col++){
                if(col > 1)
                {
                    if(oneDiagonal(tab,row,col,-1)){
                        counter++;
                    }
                }
                if(col < tab[row].length - 2)
                {
                    if(oneDiagonal(tab,row,col,1)){
                        counter++;
                    }
                }
            }
        }
        return counter;
    }
    private static boolean oneDiagonal(char[][] tab,int row,int col,int right){
        if(tab[row][col] == 'a' && tab[row+1][col+right] == 'l' && tab[row+2][col+2*right] == 'a'){
            return true;
        }
        else{
            return false;
        }
    }
0

Dzięki serdeczne, już widzę w czym był problem.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.