2017-10-15 34 views
0

Ce programme permet à l'utilisateur de décider de la longueur (lignes) d'un triangle et de décider s'il doit être orienté vers le haut ou vers le bas. Et le triangle est fait de lettres, de sorte qu'il est censé ressembler à ceci:Triangle imprimant des lettres dans le mauvais ordre et caractères non désirés

How many rows would you like? (finish with -1): 4 
Do you want the triangle to face up (1) or down (2)? 1 

A 
A B 
A B C 
A B C D 

How many rows would you like? (finish with -1): 6 
Do you want the triangle to face up (1) or down (2)? 2 

A B C D E F 
A B C D E 
A B C D 
A B C 
A B 
A 

J'ai deux problèmes lorsque je tente d'obtenir le triangle d'imprimer vers le bas, d'abord les lettres ressemblent à ceci (il devrait commencer avec un A)

F E D C B A 
F E D C B 
F E D C 
F E D 
F E 
F 

Et les lettres sont suivies par des charges de caractères différents que je ne veux pas. J'ai essayé tellement de choses et rien ne semble fonctionner. Je pourrais vraiment utiliser un conseil.

Ceci est mon code à ce jour:

import java.util.Scanner; 

public class Triangle { 

    public static void main(String args[]) { 
     Scanner scan = new Scanner(System.in); 
     int a = 0; 
     int b = 0; 

     while (a != -1) { 
      System.out.println("How many rows would you like? (finish with -1):"); 
      a = scan.nextInt(); 
      if (a != -1) { 
       b = a - 1; 

       int j = 'A'; 
       char alphabet = (char) (j + 'A'); 


       System.out.println("Do you want the triangle to face up (1) or down (2)?"); 
       int c = scan.nextInt(); 

       if (c == 1) { 
        for (int i = 1; i <= b + 'A'; i++) { 
         for (j = 'A'; j <= i; j++) 
          System.out.print((char) j + " "); 
         System.out.println(alphabet); 
        } 
       } else { 
        for (int i = 1; i <= b + 'A'; i++) { 
         for (j = b + 'A'; j >= i; j--) 
          System.out.print((char) j + " "); 
         System.out.println(alphabet); 

        } 
       } 
      } 
     } 
    } 

} 

Répondre

0
public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    int a = 0; 
    int b = 0; 

    while (a != -1) { 
     System.out.println("How many rows would you like? (finish with -1):"); 
     a = scan.nextInt(); 
     if (a != -1) { 
      System.out.println("Do you want the triangle to face up (1) or down (2)?"); 
      int c = scan.nextInt(); 

      if (c == 1) { 
       for (int i = 0; i < a; i++) { 
        for (int j = 0; j <= i; j++) { 
         System.out.print((char) (j + 'A')); 
        } 
        System.out.println(); 
       } 
      } else { 
       for (int i = 0; i < a; i++) { 
        for (int j = a; j > i; j--) { 
         System.out.print((char) (a - j + 'A')); 
        } 
        System.out.println(); 
       } 
      } 
     } 
    } 
} 
0

adopter une solution plus modulaire donnée ci-dessous. Imprime les deux triangles composés de 4 rangées, l'une vers le haut et l'autre vers le bas.

public static void main(String args[]) { 
    int a = 4; // # of rows 
    // Triangle facing up 
    for (int i = 1; i <= a; i++) // i - How many letters in this row (also row No) 
    printRow(i); 
    System.out.println("--------"); // Separator 
    // Triangle facing down - Start from the longest row, then decrease its length 
    for (int i = a; i > 0; i--) 
    printRow(i); 
} 

static void printRow(int length) { 
    for (int j = 0; j < length; j++) // j - char code shift 
    System.out.printf("%c ", j + 'A'); 
    System.out.println(); 
} 

Cette solution est plus élégante, car le code pour imprimer une ligne n'est pas répété. Notez également une manière plus naturelle d'exprimer la longueur des lignes consécutives: Pour le triangle dirigé vers le bas, la longueur de la ligne diminue.