2012-12-17 8 views
3

J'ai du mal à terminer un exercice java, cela implique d'utiliser des tableaux 2d pour créer dynamiquement et afficher une table basée sur un paramètre de ligne de commande.Exercice Java - tableau d'affichage avec tableau 2d

Exemple:

table java 5

+-+-+-+-+-+ 
|1|2|3|4|5| 
+-+-+-+-+-+ 
|2|3|4|5|1| 
+-+-+-+-+-+ 
|3|4|5|1|2| 
+-+-+-+-+-+ 
|4|5|1|2|3| 
+-+-+-+-+-+ 
|5|1|2|3|4| 
+-+-+-+-+-+ 

Ce que je l'ai fait jusqu'à présent:

public static void main(String[] args) { 

    int num = Integer.parseInt(args[0]); 

    String[][] table = new String[num*2+1][num]; 

    int[] numbers = new int[num]; 
    int temp = 0; 

    for(int i=0; i<numbers.length; i++) 
     numbers[i] = i+1; 

     // wrong 
    for(int i=0; i<table.length; i++){ 
     for(int j=0; j<num;j++){ 
      if(i%2!=0){ 
      temp=numbers[0]; 
      for(int k=1; k<numbers.length; k++){ 
       numbers[k-1]=numbers[k]; 
      } 
      numbers[numbers.length-1]=temp; 
      for(int l=0; l<numbers.length; l++){ 
      table[i][j] = "|"+numbers[l]; 
      } 
      } 
      else 
       table[i][j] = "+-"; 
    } 
    } 

    for(int i=0; i<table.length; i++){ 
     for(int j=0; j<num; j++) 
     System.out.print(table[i][j]); 
     if(i%2==0) 
      System.out.print("+"); 
     else 
      System.out.print("|"); 

     System.out.println();} 
} 

Cela ne fonctionne pas, car il imprime 1 | 2 | 3 | 4 dans chaque rangée, ce qui n'est pas ce dont j'ai besoin. J'ai trouvé le problème, et c'est parce que la première boucle for change l'ordre du tableau plus de fois que nécessaire et, fondamentalement, elle revient comme elle l'était au début. Je sais que probablement il y a un moyen d'y parvenir en écrivant plus de code, mais j'ai toujours tendance à imbriquer autant que possible pour "optimiser" le code pendant que je l'écris, c'est pourquoi j'ai essayé de résoudre cet exercice en utilisant moins de variables et de boucles que possible.

+1

Si vous avez trouvé le problème d'impression, ce * ne * vous avez besoin d'aide ? – thegrinner

+0

J'ai besoin d'aide pour trouver un moyen de résoudre le problème, puisque j'ai passé une demi-journée à essayer de le trouver: \ – TheHacker66

+0

vous voulez juste imprimer la table avec int [] [] comme données d'entrée ou vous devez sauvegarder exactement format de table sous forme de chaîne [] []? par exemple. ce serait String [11] [11] pour chaque ligne et colonne. beaucoup de lignes seraient dupliquées si. (ceux + - + - + ...)? – Kent

Répondre

1

Vous êtes trop complexe. Difficile de trouver votre erreur Le code suivant est le suivant:

public static void main(String[] args) { 


    //int num = Integer.parseInt(args[0]); 
    int num = 5; // for test 

    // creating 2d array 
    int[][] figures = new int[num][num]; 

    // filling the array 
    for(int row=0; row<figures.length; ++row) { 
     for(int col=0; col<figures[row].length; ++col) { 
      figures[row][col] = (row + col) % num + 1; 
     } 
    } 

    // printing the array 
    for(int row=0; row<figures.length; ++row) { 

     // printing border 
     for(int col=0; col<figures[row].length; ++col) { 
      System.out.print("+-"); 
     } 
     System.out.println("+"); 

     // printing data row 
     System.out.print("|"); 
     for(int col=0; col<figures[row].length; ++col) { 
      System.out.print(figures[row][col]); 
      System.out.print("|"); 
     } 
     System.out.println(); 
    } 

    // printing final border 
    for(int col=0; col<figures[0].length; ++col) { 
     System.out.print("+-"); 
    } 
    System.out.println("+"); 


} 
+0

Merci beaucoup, je pense que je vais devoir arrêter de penser trop dur et essayer différentes approches plutôt que de se concentrer sur un seul;) – TheHacker66

1
public static void main(String args[]){ 
int dimension = Integer.valueOf(args[0]); 
int[][] twoDimArray = new int[dimension][dimension]; 
for(int i=0;i<dimension;i++){ 
    for(int j=0;j<dimension;j++){ 
    System.out.print("|"+((i+1)%(dimension+1))); 
    } //end of j loop 
} //end of i loop 
} //end of main 

Ce qui précède est seulement la logique pour imprimer les nombres dans la séquence spécifiée. L'autre modèle de conception (+ - +) chose que je suppose que vous pouvez gérer.

+0

Gee, vous avez résolu avec si peu de lignes .. Je me sens un peu stupide maintenant :) – TheHacker66

1

les codes suivants vont initialiser un tableau int 2d pour les données (1-5 dans votre exemple). et imprimez la table. Notez que la structure de la table n'était pas enregistrée dans un tableau 2d-String. il suffit d'imprimer la table. voir les commentaires en ligne.

public static void main(String[] args){ 
     final int num = 5; //hardcoded 5, just for testing. 
     final int[][] data = new int[num][num]; 
     for (int r = 0; r < data.length; r++) { 
      for (int c = 0; c < data[r].length; c++) { 
       final int t = r + c + 1; 
       data[r][c] = t <= num ? t : t - num; 
      } 
     } 
     // now we have all int data in data 2D-array  
     // here is the +-+- line 
     final StringBuilder sb = new StringBuilder("+"); 
     for (int i = 0; i < data.length; i++) 
      sb.append("-+");  
     // now print the table 
     for (int r = 0; r < data.length; r++) { 
      System.out.println(sb.toString()); 
      for (int c = 0; c < data.length; c++) 
       System.out.print("|" + data[r][c]); 
      System.out.println("|"); 
     } 
     System.out.println(sb.toString()); 

    } 

sortie:

si vous donnez num = 9 comme argument. les codes ci-dessus imprimeront:

+-+-+-+-+-+-+-+-+-+ 
|1|2|3|4|5|6|7|8|9| 
+-+-+-+-+-+-+-+-+-+ 
|2|3|4|5|6|7|8|9|1| 
+-+-+-+-+-+-+-+-+-+ 
|3|4|5|6|7|8|9|1|2| 
+-+-+-+-+-+-+-+-+-+ 
|4|5|6|7|8|9|1|2|3| 
+-+-+-+-+-+-+-+-+-+ 
|5|6|7|8|9|1|2|3|4| 
+-+-+-+-+-+-+-+-+-+ 
|6|7|8|9|1|2|3|4|5| 
+-+-+-+-+-+-+-+-+-+ 
|7|8|9|1|2|3|4|5|6| 
+-+-+-+-+-+-+-+-+-+ 
|8|9|1|2|3|4|5|6|7| 
+-+-+-+-+-+-+-+-+-+ 
|9|1|2|3|4|5|6|7|8| 
+-+-+-+-+-+-+-+-+-+ 
+0

aussi pour cet exemple supplémentaire;) – TheHacker66

1

vous faire essayer plus compliqué ce code simple:

enter code here 
public static void main(String[] args)  
{ 
    int n = 5 ; 
    for(int i = 1 ; i <= n ;i++) 
    { 
     for(int l = 0 ; l < n;l++) 
     System.out.print("+-"); 

     System.out.print("\n|"); 
     for(int j = i ; j <=n;j++) 
     { 
      System.out.print(j+"|"); 

     } 
    for(int k = 1 ; i >= 2 && k <=i-1;k++) 
    { 
     System.out.print(k+"|"); 
    } 
     System.out.println(); 
    } 

}