2015-10-10 1 views
0

Je travaille donc sur les boucles et les boucles imbriquées. Je dois donc m'en tenir à ces fonctions principales.For boucle dans une boucle for

Je me suis retrouvé coincé sur une question. Je peux penser à la logique de la façon dont je le résoudreais ... mais je ne peux pas comprendre comment je le ferais avec des boucles/imbriquées pour des boucles.

Je dois imprimer des codes Ascii en rangées de 10

Exemple:

XXXXXXXXX

XXXXXXXXX

XXXXXXXXX

(32-122)

Voici mon code jusqu'à présent:

public class chars{ 
    public static void main(String[]args){ 

     for(int j = 32; j < 122; j++){ 

      System.out.print((char)j); 

//Once above loop is performed 10*...execute a new line..using a for loop..??    
       System.out.println(); 
        } 
       } 
      }  
+0

qu'est-ce qui pose problème? Avez-vous essayé d'écrire vous-même la boucle interne qui ne fonctionne que 10 fois. – YoungHobbit

+0

ne pas utiliser une boucle for, en utilisant if instruction! – QuakeCore

+0

quelle est la sortie désirée? il n'y a pas de boucle imbriquée ... – chenchuk

Répondre

2

Une approche simple pourrait être d'utiliser une instruction if comme suggéré par QuakeCore. le code viendrait à ressembler à quelque chose comme ce qui suit:

public static void main(String[] args) { 
    for (int j = 32; j < 122; j++) { 
     System.out.print((char)j); 
     if (j % 10 == 1) { 
      System.out.println(); 
     } 
    } 
} 

Cela laisse pour un code laid lorsque vous travaillez avec la fonction Modulus dans la condition if.La raison en est que nous commençons avec le nombre 32 et en augmentant de leur, donc nous obtenons j% 10 == 1 au lieu de quelque chose de plus agréable comme j% 10 == 0. Mais, votre question indique que vous souhaitez le résoudre avec For boucle à l'intérieur d'une boucle for, ce qui me fait penser que c'est une tâche scolaire. Cela peut être résolu en regardant les boucles comme des fonctions à effectuer dans l'espace 2D. De telle sorte que la première boucle for gère les lignes, tandis que la boucle interne for gère les colonnes (ou respectivement y et x). De cela, nous pouvons résoudre le problème comme suit:

public static void main(String[] args) { 
    // Increment row/counter by 10 
    for (int row = 32; row < 122; row += 10) { 
     for (int col = 0; col < 10; col++) { 
      System.out.print((char)(row + col)); 
     } 
     System.out.println(); 
    } 
} 
+0

Wow ... J'aime vraiment la façon dont vous l'avez résolu avec votre code. Je n'aurais pas trouvé une solution comme celle-là ... merci de répondre, certainement eyeopening. – AnthonyJ

0

le faire avec des boucles/imbriquées pour les boucles

Essayez this-

public static void main(String[] args) { 

     for (int j = 32; j < 122; j++) { 

      System.out.print((char) j); 
      if((j-32)%10==0){ 
       System.out.println(); 
      }    
     } 
    } 

Ici la condition intérieure prendra soin de changer la ligne lorsque vous avez imprimé 10 valeurs

4

Vous êtes en boucle extérieure devrait contrôler ce que r ow vous êtes sur, et la boucle interne quelle colonne. Ainsi, juste la boucle extérieure ressemble à ceci (il y a 9 lignes):

for (int i = 1; i <= 9; i++) 
{ 
    System.out.println(""); 
} 

Ce imprimera 9 sauts de ligne, vous donnant les 9 lignes. Maintenant, votre logique de colonne va à l'intérieur, mais avant le println.

for (int i = 0; i < 9; i++) 
{ 
    for (int j = 0; j < 10; j++) 
    { 
     char print = (char)((i * 10) + 32 + j); 
     System.out.print(print); 
    } 
    System.out.println(""); 
} 

Ceci utilise une petite astuce mathématique pour générer les nombres de la séquence. Ligne 1 = 32 à 41, 2 = 42 à 51, etc.

Notez également que c'est légèrement plus verbeux que d'autres réponses possibles parce que j'ai utilisé des boucles imbriquées comme vous avez demandé.

+0

MERCI BEAUCOUP !!! C'est ça ... C'est exactement ce dont j'avais besoin. J'ai passé des heures à essayer de comprendre cela, je vais maintenant étudier votre code et l'indenter dans mon esprit! – AnthonyJ

0

Ce imprimera chaque omble chevalier 10 fois de suite (avec imbriquée pour les boucles):

public static void main(String[] args) { 
     for (int j = 32; j < 122; j++) { 

      // print 10 times the same char in the same line 
      for (int i=0;i<=10;i++){ 
       System.out.print((char) j); 
      } 
      // after 10 char : goto next line 
      System.out.println(); 
     } 
    } 
+0

Si je ne me trompe pas alors la question est de ne pas imprimer le même caractère 10 fois dans une ligne ... à la place veut 10 caractères dans une ligne –

+0

Merci Shadow. Je ne suis pas sûr non plus ... il demande des boucles imbriquées – chenchuk

+0

En question il est mentionné comme "Je dois imprimer les codes Ascii en rangées de 10" –

0

Si vous devez utiliser des boucles imbriquées, alors peut-être quelque chose comme ça fonctionnerait:

int lineLength = 10; 
int lineCount = (122 - 32)/lineLength; 
for (int line = 0; line < lineCount; line++) { 
    for (int column = 0; column < lineLength; column++) { 
     int index = (line * lineLength) + column; 
     System.out.print((char)(32 + index) + " "); 
    } 
    System.out.println(); 
} 
2

La syntaxe pour une boucle for est:

for(initialisation; condition de terminaison ;incrément)corps

Howe ver, chacun de ces éléments en italique ci-dessus est facultatif. Les parties d'initialisation et d'incrémentation peuvent avoir plusieurs composants, séparés par une virgule.

Puisque vous connaissez le nombre total de caractères est un multiple de 10, voici ce que je ferais:

public static void main(String[]args){ 
    for(int j = 32; j < 122; /* don't increment j here */){ 
     // print 10 chars per line 
     for (int col=0; col<10; col++, j++ /* increment j here instead */) { 
      System.out.print((char)j); 
     } 
     System.out.println(); 
    } 
} 

Notez que si le nombre total de caractères était pas un multiple de 10, puis l'intérieur La boucle peut imprimer des extras, puisque la condition de la boucle externe n'est vérifiée qu'une fois tous les 10 caractères.

+0

Super réponse.C'est très simple et efficace. – udaybhaskar

+0

@udaybhaskar - Merci! J'ai été vraiment surpris quand j'ai fait défiler les 4 réponses existantes, et ils ont tous utilisé des maths relativement complexes (multiplication, division, modulo) pour faire ce qui pourrait être accompli avec un simple incrément. – DaoWen