3 votes

Problème d'impression sur la même ligne

J'essaie d'écrire un code où vous entrez un nombre entier dans la console, et ensuite le nombre entier que vous avez entré est affiché plus grand, composé de lettres (comme l'art ascii).

Disons que l'entrée est 112 . Alors la sortie sera

   #       #     #####  
  ##      ##    #     # 
 # #     # #          # 
   #       #     #####  
   #       #    #       
   #       #    #       
 #####   #####  ####### 

Mon code aura la même sortie, mais pas sur la même ligne :(

Il va imprimer un chiffre sous l'autre A partir de mon code, vous pouvez voir pourquoi :

import java.util.Scanner;
public class Tester {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String any = input.nextLine();
        String[] sArray = any.split("");

        for(int i=0; i<sArray.length; i++){
            if(sArray[i].equals("1")){
                System.out.println("  #  ");
                System.out.println(" ##  ");
                System.out.println("# #  ");
                System.out.println("  #  ");
                System.out.println("  #  ");
                System.out.println("  #  ");
                System.out.println("#####");
            }
            if(sArray[i].equals("2")){
                System.out.println(" ##### ");
                System.out.println("#     #");
                System.out.println("      #");
                System.out.println(" ##### ");
                System.out.println("#      ");
                System.out.println("#      ");
                System.out.println("#######");
            }
        }
    }
}

Je dois en quelque sorte imprimer tout en une seule fois, et non pas une sortie unique avec println comme mon code.. Peut-être y a-t-il un moyen facile de résoudre ce problème, de préférence sans changer tout mon code ? Je peux imaginer que cela pourrait être fait avec un tableau 2d aussi, mais je ne suis pas sûr. Les conseils sont également les bienvenus. Et ce n'est pas un devoir.

3voto

Harmlezz Points 3632

Sale, mais ça marche :

private static final Map<Integer, String[]> art = new HashMap<Integer, String[]>() {{
    put(1, new String[] {
            "   #   ",
            "  ##   ",
            " # #   ",
            "   #   ",
            "   #   ",
            "   #   ",
            " ##### " });
    put(2, new String[] {
            " ##### ",
            "#     #",
            "      #",
            " ##### ",
            "#      ",
            "#      ",
            "#######" });
    }};

public static void main(String[] args) {
    int[] input = { 1, 1, 2 };
    for (int row = 0; row < 7; row++) {
        for (int num : input) {
            System.out.print(art.get(num)[row] + " ");
        }
        System.out.println();
    }
}

J'ai ignoré le code du scanner et supposé une entrée de 1 1 2 .

Sortie

   #       #     #####  
  ##      ##    #     # 
 # #     # #          # 
   #       #     #####  
   #       #    #       
   #       #    #       
 #####   #####  #######

2voto

Pawan mishra Points 878

Utilisez String ou StringBuilder pour stocker chaque ligne et imprimer en dernier lieu toutes les chaînes.
Logique

import java.util.Scanner;
public class Tester {
public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    String any = input.nextLine();
    String[] sArray = any.split("");
    String str1="";String str2="";String str3="";String str4="";String str5="";String str6="";String str7="";
    for(int i=0; i<sArray.length; i++){
        if(sArray[i].equals("1")){
            str1+="  #  ";
            str2+=" ##  ";
            str3+="# #  ";
            str4+="  #  ";
            str5+="  #  ";
            str6+="  #  ";
            str7+="#####";
        }
        if(sArray[i].equals("2")){
            str1+=" ##### ";
            str2+="#     #";
            str3+="      #";
            str4+=" ##### ";
            str5+="#      ";
            str6+="#      ";
            str7+="#######";
        }

    }
   System.out.println(str1);
    System.out.println(str2);
   System.out.println(str3);
 System.out.println(str4);
 System.out.println(str5);
  System.out.println(str6); System.out.println(str7);
}
}

2voto

assylias Points 102015

Logique suggérée :

  • placer les chaînes de caractères, ligne par ligne, dans des tableaux :

    private static final String[] ONE = { "  #  ",
                                          " ##  ",
                                          ... };
  • exécuter deux boucles for imbriquées :

    for (int i = 0; i < heightOfPrintedDigits; i++) {
      for (String number : sArray) {
        ... //use print here but finish with an empty println("") to insert a new line
      }
    }

2voto

Tim Biegeleisen Points 53335

Utilisez des tableaux de chaînes de caractères pour stocker la représentation multi-lignes de chaque nombre, puis utilisez une carte pour stocker tous les nombres. Un numéro de chaîne peut servir de clé, ce qui renvoie une représentation de tableau de chaînes pour ce numéro de chaîne.

final int NUM_HEIGHT = 7;
String any = "1 1 2";
String[] one = new String[] {
    "  #  ",
    " ##  ",
    "# #  ",
    "  #  ",
    "  #  ",
    "  #  ",
    "#####"};
String[] two = new String[] {
    " #####  ",
    "#     # ",
    "      # ",
    " #####  ",
    "#       ",
    "#       ",
    "####### "};
Map<String, String[]> map = new HashMap<>();
map.put("1", one);
map.put("2", two);

String[] numbers = any.split("\\s");
for (int i=0; i < NUM_HEIGHT; ++i) {
    StringBuilder line = new StringBuilder();
    for (String number : numbers) {
        line.append(map.get(number)[i]);
        line.append("  ");
    }
    System.out.println(line);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X