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])); } } }
3 Réponses :
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])); } } }
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(""); } } }
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.
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); } } }
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.
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]
pour0 <= i < n
; les diagonales adjacentes les plus proches seront toutes lesarray[i][i+1]
et lesarray[i+1][i]
pour0 <= i < n - 1
; les diagonales adjacentes les plus proches suivantes seront toutes lesarray[i][i+2]
et lesarray[i+2][i]
pour0 <= i < n - 2
, etc. Pouvez-vous voir le modèle qui commence à se développer ici?