0
votes

Comment convertir Int Value 09 en Tableau de charme comme {'0', '9'}?

Je travaille sur le problème pour trouver le prochain numéro le plus grand avec le même ensemble de chiffres.

Pour cela, je prends une valeur de valeur entière de l'utilisateur et je souhaite convertir en tableau de caractères, afin que je puisse accéder à des chiffres individuels.

mais quand je prends

Valeur int = 09 En tant qu'entrée et convertir en graphique, il ne donne que 9 car il le considère comme une valeur octale. Comment puis-je surmonter cela?


4 commentaires

Prenez l'entrée en tant que chaîne plutôt que si vous souhaitez conserver une rubrique 0. ALORS .TOCHARARRAY () La chaîne de stockage de tableau de caractères.


Les variables entière stockent la valeur numérique, pas la représentation textuelle, elles ne peuvent donc pas suivre les zéros de pointe. 9 , 09 , 009 , ... sont toutes la même valeur numérique, i.e. 9 . Comme Tim a commenté, si vous devez connaître les principaux zéros dans l'entrée, vous devez obtenir cela comme une chaîne , pas comme un int .


" 09 " comme valeur octale? Je l'aime :)


Sent comme des devoirs ici, et je pense que vous allez réellement dans la mauvaise manière. Peut-être devriez-vous essayer de mieux expliquer ce que vous essayez vraiment de faire. Vous dites que vous devez trouver le "prochain plus grand nombre avec le même ensemble de chiffres". Si je l'obtiens correctement, la réponse "09" serait "90" et pour "123", vous obtiendriez "132" ... Est-ce correct? Maintenant, comment pouvez-vous planifier de résoudre ce problème? Ne pensez pas encore au code Java. Vous souhaitez considérer chaque chiffre fourni et les déplacer en quelque sorte. Pensez à cela, alors vous pouvez envisager de mettre à jour votre question.


5 Réponses :


0
votes

Il n'est pas possible de convertir un 09 code> int Valeur sur une chaîne de 9 code> car la valeur 09 code> ne peut pas être stockée dans un INT code>.

int code> n'est pas capable de stocker des zéros de fin. P>

Prenez cet échantillon. p>

public Integer[] parseToInteger(String number) {
    return Arrays.asList(number.toCharArray())
        .stream()
        .map(c -> Integer.valueOf(c.toString()))
        .toArray(size -> new Integer[size]);
}


4 commentaires

09 ne peut pas être couler à une chaîne. Appelant ValeurOf n'est pas Casting , c'est une opération analysant . Le mot "casting" a une signification très particulière dans la langue Java, alors veuillez corriger votre terminologie.


@Andreas bonne prise! Je voulais citer l'auteur sur "INT = 09 comme entrée et convertir en graphique" car ce n'est pas PASIBE. va le changer!


Ce que vous venez de dire dans ce commentaire pourrait être encore pire, car int x = 09 ne parviendrait pas à compiler, étant donné que 9 n'est pas un chiffre valide dans un littéral octal. Vous n'auriez peut-être pas eu la signification de cette façon, mais ... une clarté de ce que vous dites compte, alors payez un peu plus d'attention à la façon dont vous dites des choses, s'il vous plaît.


Eh bien c'est exactement ce que je viens d'écrire. Il n'est pas possible de stocker 09 dans un int . La chose que j'ai dit dans mon commentaire est une citée aux auteurs post ...



0
votes

Il n'est pas possible dans Java de prendre les valeurs INT avec des zéros de premier plan. Donc, pour la valeur avec des zéros de premier plan, prenez-la au format de la chaîne.

Mais nous pouvons insérer des zéros

int n = 7;
String str = string.format ("% 04d", n); // 4 désigne la taille de la chaîne
System.out.println (str); // o / p-> 0007


1 commentaires

Une raison quelconque de votre réponse est une citation? Qui / qu'est-ce que vous citez?



0
votes

Étant donné que les hauts 0 sont déposés des entiers, il n'ya aucune raison de prendre en charge l'attribution d'une telle valeur à un int.

si je veux convertir 9 sur '9' J'ajouterais généralement '0' à celui-ci.

Vous pouvez également faire ce qui suit: xxx

si vous avez Une chaîne de caractères, vous pouvez procéder comme suit: xxx

impression xxx


0 commentaires

0
votes

Il n'est pas possible d'attribuer un entier avec un (code> 0 à un int variable par exemple. int x = 09; échouera la compilation. Vous devez obtenir l'entrée comme une chaîne et le traiter.

par exemple xxx

A Exemple de l'échantillon: xxx


0 commentaires

0
votes

Vous vous demandez comment analyser un numéro à partir d'un zéro directeur, mais je reçois le sentiment que vous êtes en fait sur la piste de Worng étant donné le problème que vous essayez de résoudre. Alors, prenons un pas en arrière et assurons-vous que je comprends votre problème correctement.

Vous dites que vous devez trouver le "prochain numéro le plus grand avec le même ensemble de chiffres". Donc, vous jouez "Scrabble" avec des chiffres, essayant de trouver le numéro le plus smalest composé avec les mêmes chiffres qui sont strictement supérieurs au nombre d'origine. Par exemple, étant donné l'entrée "09", vous produiriez "90", et pour "123", vous produiriez "132". Est-ce correct? Laissez-la supposer.

Maintenant, le véritable défi Voici comment déterminer le nombre le plus smalest composé avec ceci chiffres qui est stricidement plus grande au nombre d'origine. En fait, il y a quelques stratégies possibles:

  1. énumérer toutes les permutations possibles de ces chiffres, puis filtrer ceux qui ne sont pas strictement plus importants au nombre d'origine, puis, parmi les valeurs restantes, trouvez la plus petite valeur. Ce serait une stratégie très continue, nécessitant à la fois une mémoire disproportionnée et une puissance de traitement. S'il vous plaît, ne considérez pas cela sérieusement (c'est-à-dire que si vous codez réellement pour un ordinateur quantique ;)).
  2. Définissez une variable du numéro initial, puis d'incrémenter de manière itérative que variable d'une fois que vous obtenez finalement un numéro composé des mêmes chiffres que les valeurs d'origine. Que l'on pourrait sembler simple à mettre en œuvre, mais elle cache des complexités (c'est-à-dire déterminer que deux nombres sont composés des mêmes chiffres ne sont pas trivial , une manipulation spéciale serait nécessaire pour éviter une boucle sans fin si le nombre initial est en fait la plus grande valeur qui puisse être formée avec ces chiffres). Quoi qu'il en soit, cette stratégie serait également plutôt renifiée, nécessitant une puissance de traitement considérable.
  3. Itérate sur les chiffres eux-mêmes et déterminez exactement quels chiffres doivent être échangés / réorganisés pour obtenir le numéro suivant. Ceci est en fait très simple à mettre en œuvre (je viens de l'écrire en moins de 5 minutes), mais nécessite d'abord de penser en premier. L'algorithme est O (n log n), où n est la longueur du nombre (en chiffres). Prenez une feuille de papier, écrivez des numéros d'exemple dans les colonnes et essayez de comprendre la logique derrière elle. C'est définitivement la voie à suivre.

    Les trois stratégies ont une chose en commun: ils ont tous besoin de travailler (à un moment donné au moins) avec chiffres plutôt qu'avec le nombre lui-même. Dans la dernière stratégie, vous n'avez jamais besoin de la valeur réelle elle-même. Vous jouez simplement au Scrabble, avec des chiffres plutôt que des lettres.

    Ainsi, supposant que vous souhaitez implémenter la stratégie 3, voici ce que votre principale peut ressembler (je ne développerai pas plus Sur celui-ci, les commentaires devraient être assez loin): xxx

    Voici le point de toutes ces discussions: la méthode ParetOdigits est un String et renvoyer un tableau de chiffres (j'ai utilisé int ici pour garder les choses plus simples, mais octet aurait réellement été suffisant). Donc, fondamentalement, vous souhaitez prendre les caractères de la chaîne d'entrée et convertir cette matrice à un tableau d'entier, avec chaque position dans la sortie contenant la valeur du chiffre correspondant dans l'entrée. Cela peut être écrit de différentes manières en Java, mais je pense que le plus simple serait avec un simple pour boucle: xxx

    Notez que Caractère.fordigit (chiffre, radix) renvoie la valeur du caractère chiffre dans la base radix ; Si chiffre n'est pas valide pour la base donnée, fordigit renvoie 0 . Pour la simplicité, je saute une vérification de la validation adéquate ici. On pourrait envisager d'appeler caractère.isdigit (chiffre, radix) d'abord pour déterminer si un chiffre est acceptable, jetant une exception si ce n'est pas le cas.

    sur l'opportunité opposée, < Code> JOINDIGITS , il ressemblerait à: xxx

    espère que cela aide.


0 commentaires