-1
votes

Tableau multidimensionnel, remplissez la matrice par des nombres en Java

Je suis donc complètement perplexe. J'ai besoin de créer un tableau multidimensionnel nxn et de le remplir d'une manière particulière. J'ai pu créer le tableau 2d par nxn mais je n'ai aucune idée de comment le remplir. Ci-dessous, j'ai inclus la tâche formulée exactement telle qu'elle m'a été confiée.

Étant donné le nombre n, pas supérieur à 100. Créez la matrice de taille nà-n et remplissez-la par la règle suivante. Les nombres 0 doivent être stockés sur la diagonale principale. Les deux diagonales, adjacentes à la principale, doivent contenir les nombres 1. Les deux diagonales suivantes - nombres 2, etc.

Exemple d'entrée 1:

5

Exemple de sortie 1:

0 1 2 3 4
1 0 1 2 3
2 1 0 1 2
3 2 1 0 1
4 3 2 1 0

Voici mon code pour l'instant. N'importe quelle direction serait géniale !!

class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[][] array = new int[n][n];

        for (int i = 0; i < array.length; i++) {
            System.out.println(Arrays.toString(array[i]));
        }
    }
}


2 commentaires

Bienvenue à SO! Votre tentative ne montre pas vraiment d'efforts pour résoudre ce problème - tout cela ne fait que collecter la taille de la matrice et imprimer des lignes de zéros. Pourriez-vous y investir un peu plus d'énergie pour que la question ne ressemble pas tellement à un "fais ça pour moi?" question? Vous aurez probablement besoin d'une ou deux boucles intérieures et d'un ou deux compteurs supplémentaires. Merci!


ASTUCE: la diagonale principale sera tout array[i][i] pour 0 <= i < n ; les diagonales adjacentes les plus proches seront toutes les array[i][i+1] et les array[i+1][i] pour 0 <= i < n - 1 ; les diagonales adjacentes les plus proches suivantes seront toutes les array[i][i+2] et les array[i+2][i] pour 0 <= i < n - 2 , etc. Pouvez-vous voir le modèle qui commence à se développer ici?


3 Réponses :


0
votes

Voici comment j'aborderais votre problème:

J'utiliserais des boucles for imbriquées, une pour parcourir les lignes et une pour parcourir les colonnes. Dans mon exemple, i itère sur des lignes et j sur des colonnes. Maintenant que je sais que je frappe chaque cellule de la matrice une et une seule fois, je dois juste trouver un moyen de calculer la valeur de la cellule à partir de i et j . Dans ce cas, la valeur de la cellule est le numéro de colonne moins le numéro de ligne, ou i - j , sauf qu'il n'y a pas de négatifs, qui peuvent facilement être résolus avec une valeur absolue ( Math.abs(int) ). Voici comment je le ferais:

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        scanner.close(); // remember to close all your resources!
        int[][] array = new int[n][n];

        for (int i = 0; i < n; i++) { //iterate over rows
            for (int j = 0; j < n; j++) { //iterate over columns
                array[i][j] = Math.abs(j - i); //calculate cell's value
            }
        }

        for (int i = 0; i < n; i++) {
            System.out.println(Arrays.toString(array[i]));
        }
    }
}


0 commentaires

0
votes
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        // put your code here
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[][] array = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                array[i][j] = Math.abs(j - i);
                System.out.print(array[i][j] + " ");
            }
            System.out.println("");
        }
    }
}

1 commentaires

Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme.



0
votes
import java.util.Arrays;
import java.util.Scanner;

public class FillTheMatrixByTheNumbers {
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    scanner.close();
    int[][] matrix = new int[n][n];

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            matrix[i][j] = Math.abs(j - i);
        }
    }
    for (int i = 0; i < n; i++) {
        String str = Arrays.toString(matrix[i]);
        str = str.replace("[", "").replace(",", "").replace("]", "");
        System.out.println(str);
    }
  }
}

2 commentaires

Cela fonctionnerait correctement en fonction de mon expérience :)


Essayez d'ajouter plus d'attentes à votre réponse. Poster du code n'est pas utile.