J'ai un int tableau int a1[];

À un moment donné dans mon code, si les conditions sont réunies, je souhaite remplacer la valeur de a[i] par un espace. Par exemple, si ma sortie est:

1 2 3 4 5 6

Je veux le faire:

1 2   4 5 6

Comment puis je faire ça?

Modifier: Un tableau d'entiers qui contient un mélange d'entiers et d'espaces est une solution que j'ai trouvée mais qui ne semble pas fonctionner. Tout ce que je veux, c'est un moyen d'obtenir la sortie que j'ai montrée, et le but est de rendre ma sortie plus attrayante. Je fais un jeu de mémoire et je veux afficher un espace vide lorsque la supposition est correcte afin que l'utilisateur puisse voir sa progression.

1
Wal Choice 20 nov. 2018 à 11:38

3 réponses

Meilleure réponse

Réponse courte: Vous ne pouvez pas stocker un espace (un caractère) sous la forme d'un entier, si c'est ce que vous essayez de faire. Je changerais int en type Integer afin que vous puissiez ajouter des valeurs nulles au tableau et si vous trouvez une valeur nulle, j'imprimerais un espace blanc à la place.

Cependant, vous pouvez obtenir la représentation numérique d'un tel caractère, mais dans ce cas, cela change le type de données.

0
Enrique de Miguel 20 nov. 2018 à 10:22

Dans le commentaire, vous mentionnez que vous faites un jeu de mémoire et que l'espace blanc n'est là que pour visualiser les «bonnes suppositions». Dans cet esprit, vous pouvez garder le tableau existant tel quel et introduire un parallèle boolean[] guesses = new boolean[a1.length]; ayant la même taille que le tableau values.

Ensuite, vous mettez à jour guesses[i] = true; quand il y a une estimation correcte et imprimez votre tableau avec quelque chose comme

for (int i=0; i < a1.length; i++) {
   System.out.print(guesses[i] ? " " : a1[i]);
}
0
Mick Mnemonic 20 nov. 2018 à 09:17

Modifier

Pour votre jeu de mémoire, je suggère une classe de modèle pour contenir le numéro et une indication s'il a été deviné. Quelque chose dans ce sens:

public class GameElement {
    final int number;
    boolean guessed = false;

    public GameElement(int number) {
        this.number = number;
    }

    public void setGuessed() {
        guessed = true;
    }

    @Override
    public String toString() {
        if (guessed) {
            return " ";
        } else {
            return String.valueOf(number);
        }
    }
}

Vous voudrez probablement aussi mettre l'élément à deviner dans la classe pour que vous ayez tout au même endroit (ou j'ai mal compris quelque chose).

Encore mieux, plutôt que de vous fier à une méthode toString, décidez de la présentation complètement en dehors de votre classe de modèle. Pour cela, ajoutez des getters getNumber et isGuessed pour que la présentation puisse accéder aux données et décider comment les présenter à l'utilisateur.

Réponse originale

Comme cela a été dit dans les commentaires, cela n’est pas possible.

Vous pouvez choisir une valeur spéciale int pour signifier "espace" et n'oubliez pas de l'imprimer sous forme d'espace à chaque fois. C'est fragile car un collègue programmeur peut oublier d'imprimer l'espace et simplement afficher la valeur int.

La solution dorée (en espérant que vous n'en avez pas besoin): Concevez une classe abstraite Element avec deux sous-classes, IntElement et SpaceElement et créez un tableau de Element (vous pouvez probablement trouver un meilleur nom). Demandez au IntElement de maintenir un int et son toString renvoie une représentation sous forme de chaîne du int. Have SpaceElement ne contient aucune donnée et son toString renvoie une chaîne constituée d'un seul espace. Vous pouvez maintenant remplir votre tableau avec des nombres et des espaces comme vous le souhaitez.

2
Ole V.V. 20 nov. 2018 à 11:50