2010-02-08 5 views
1

FYI: Ceci est un exercice de devoirs. J'ai travaillé dessus, mais maintenant je suis coincé. Tous les conseils/aide seraient appréciés. Je l'ai regardé un moment et aucun progrès n'a été fait.Aide de la matrice binaire à caractère

Résumé de la question: Neuf pièces sont placées dans une matrice 3x3 avec un face vers le haut et une face vers le bas. Têtes = 0 et queues = 1. Chaque état peut également être représenté en utilisant un nombre binaire. Il y a 512 possibilités. Problème: Ecrire un programme qui demande à l'utilisateur un nombre entre 0-511 et affiche la matrice correspondant aux caractères H et T comme ceci:

L'utilisateur entre le numéro 7 (qui est 000000111 ou HHHHHHTTT) affichage doit être: HHH HHH TTT

C'est ce que j'ai jusqu'à présent. Je ne demande pas nécessairement la réponse, je voudrais juste pousser dans la bonne direction. Merci

import java.util.Scanner; 

public class converting { 
    public static void main(String[] ar) { 

    Scanner s = new Scanner(System.in); 

     System.out.print("Enter a number between 0 and 511: "); 

     int number = s.nextInt(); 
     if(number <= 511 && number > 0) 
     { 
      String bin = Integer.toBinaryString(number); 
      String tails = bin.replace('1', 'T'); 

     int count = 0; 
     char[] arr = tails.toCharArray(); 

     for (int i = 0; i < arr.length; i++) { 

      System.out.print(arr[i]); 
      count++; 
      if (count == 3) { 
       System.out.println(); 
       count = 0; 
      } 
     } 
     } 
     else{ 
     System.out.print("Please enter a number between 0 and 511\n"); 
    } 
    } 
} 

Répondre

1

intToString.toCharArray();

Ceci devrait être bin.toCharArray(), il me semble.

De quoi d'autre avez-vous des problèmes?

1

String.replace(CharSequence, CharSequence) peut être utile ici.

4

Vous êtes vraiment proche. Quelques notes:

  • Scanner#nextInt peut jeter des exceptions; Manipulez-les avec grâce. Vous devez vérifier que number est compris dans la plage (0-511).
  • Une fois que vous avez bin, vous avez 1 à 9 chiffres binaires - 0 s et 1 s. Vous voulez vous assurer que vous avez exactement 9 d'entre eux, alors insérez 0 s à l'avant.
  • Vous avez maintenant 9 0 s et 1 s; vous voulez H s et T s. Découvrez String#replace. Vous avez maintenant une chaîne avec 9 H s et T s. Le sortir en trois lignes, trois caractères par ligne. Découvrez String#substring.
+0

Merci pour la réponse.J'ai ajouté un chèque pour les numéros valides si (nombre <= 511 && nombre> 0). J'ai également essayé d'utiliser remplacer et je l'ai eu pour travailler pour T: String Tails = bin.replace ('1', 'T'); Ma question est maintenant comment puis-je remplacer tous les F avec 0. Mon tableau char est actuellement char [] arr = tails.toCharArray(); qui a seulement les 1 remplacés. Cela a-t-il du sens? Existe-t-il un moyen de mettre à jour mon premier message avec le code que j'ai maintenant? – relyt

+0

Ok. Mise à jour du premier message Merci! – relyt

+0

@relyt: Ce '' 0 '' ne devrait-il pas être '> = 0'? Ou est-ce que l'utilisateur n'est pas autorisé à avoir un tableau qui est tout 'H's? –

1

  • J'utiliser StringBuilder pour construire le « conseil », et ne l'imprimer par la suite.
  • Je voudrais créer une méthode appelée "createBoard" qui a comme paramètres le nombre, la largeur et la profondeur. Toujours programmer pour la flexibilité.
  • Je voudrais utiliser deux compteurs, disons x et y qui parcourent la largeur et la profondeur (un simple pour la prochaine boucle suffit). position = x * largeur + y
  • Je voudrais utiliser BigInteger.valueOf() et utiliser BigInteger.testBit (position).
  • je vraiment faire en sorte que mon code semble agréable et a des commentaires dans.
  • +0

    Maarten, je suis sûr que c'est probablement un bon moyen de le faire, mais à ce stade, je pense que c'est sur ma tête. Au fur et à mesure que j'apprends, cela peut avoir du sens pour moi. Merci pour la réponse si. – relyt

    Questions connexes