10
votes

Débutant Java Question sur Integer.parseint () et Casting

Ainsi, lors de la coulée comme dans la déclaration ci-dessous: -

int randomNumber=(int) (Math.random()*5)


3 commentaires

Cela ne répondra pas à vos problèmes d'analyse, mais envisagez d'utiliser java.util.random . Vous pouvez faire Rand Rand = Nouveau aléatoire () et int Dieroll = rand.nextint (6) +1; (note, Nextint retourne 0 à (N-1), c'est pourquoi le supplément 1 sur elle)


@GlowCoder: J'étais sur le point de faire ce commentaire aussi. Il est surprenant à quelle fréquence nous voyons toujours ce math.random () * n non sens.


Bien fait pour remettre en question cela dans la manière dont vous l'avez fait, surtout le bit sur lequel pouvons-nous utiliser (int) pour lancer une chaîne à un int.


7 Réponses :


4
votes

Dans votre exemple, vous jetez un numéro de point flottant à un int. Integer.parseint (), Toutefois, lit une valeur entière d'une chaîne.


1 commentaires

oh ne pas math.random () générer un double?



1
votes

Casting ne peut convertir que d'un type numérique à un autre. L'interprétation d'une chaîne (aka analyse) doit être effectuée avec un appel de méthode.


0 commentaires

3
votes

Vous ne pouvez lancer que entre des types compatibles (je voudrais un lien vers les JLS, mais cela pourrait être trop pour une question débutante).

La coulée est essentiellement juste en train de prendre une valeur et de dire: "Hé, cette chose qui était double? Maintenant c'est un Int. Alors là."

Vous ne pouvez pas faire cela avec une chaîne parce que ce n'est rien comme un int. Vous devez plutôt parse un int hors de celui-ci, qui est en fait beaucoup plus difficile qu'il n'y paraît. Heureusement, il est déjà mis en œuvre pour vous afin que vous n'ayez pas à vous soucier de la façon dont cela fonctionne.


4 commentaires

ah ok..Je l'obtenez maintenant..Merci mais hey je pensais avoir examiner les codes de ces méthodes, c'est-à-dire ceux de parsint () et aléatoire () ... Je voulais juste voir comment ils travaillent réellement (je sais que je ne comprendrai pas tout mais aura une idée au moins) .. Où puis-je trouver des classes entier et en mathématiques? Où sont-ils stockés sur mon PC?


@Happysoul: Selon la manière dont vous avez installé le JDK, vous pouvez avoir un fichier zip appelé src.zip dans c: \ Program Files \ Java \ (votre dossier JDK). Ouvrez-le et regardez dans Java \ Lang pour trouver entier et en maths. Sinon, si vous avez une IDE correctement configuré, vous pourrez peut-être simplement CTRL + Cliquez sur le nom de la méthode pour y sauter.


Jls = Spécification de la langue Java .


@Happysoul: Installez-en un. Cela peut vous ralentir le premier jour ou plus, mais le reste de votre expérience d'apprentissage sera autant plus lisse.



24
votes

integer.parseint ne fait pas la même chose qu'une coulée.

Jetons un coup d'œil à votre premier exemple: xxx

math.random retourne un double, Et lorsque vous multipliez un double par un Int Java considère le résultat pour être un double. Ainsi, l'expression math.random () * 5 a un type de double. Ce que vous essayez de faire est d'attribuer cette valeur à une variable de type INT. Par défaut, Java ne vous permettra pas d'attribuer une double valeur à une variable de type INT sans votre racontation explicitement du compilateur qu'il est correct de le faire. Fondamentalement, vous pouvez penser à jeter un double à un Int comme indiquer au compilateur », je sais que cette variable INT ne peut contenir la partie décimale de cette double valeur, mais c'est correct, ne le tronque pas."

Jetez un coup d'œil à la conversion d'une chaîne vers un int: xxx

la chaîne "5" n'est pas immédiatement convertible à un entier. Contrairement aux doubles, qui par définition peuvent être convertis en un entier en laissant tomber la partie décimale, les chaînes ne peuvent pas être facilement ou toujours converties en int. "5", "042" et "1 000" ont tous des représentations entière, mais quelque chose comme "Bonjour, monde!" ne fait pas. A cause de cela, il n'y a pas de fonctionnalité de langue de première commande pour convertir une chaîne en int. Au lieu de cela, vous utilisez une méthode pour analyser la chaîne et renvoyer la valeur.

Pour répondre à toutes vos questions:

Pourquoi deux façons différentes de faire une valeur un int?

Vous devez prendre en compte ce que le type de la valeur que vous convertissez est. Si vous convertissez une primitive en int Vous pouvez utiliser une distribution, si vous convertissez un objet, vous devez utiliser une sorte de méthode de conversion spécifique à ce type.

Aussi j'ai fait une recherche et cela dit Paysint () prend une chaîne comme argument .. alors cela signifie-t-il que Paysint () est seulement pour convertir la chaîne en entier?

correct. Vous ne pouvez pas transmettre d'autre type à la méthode Paysint ou vous obtiendrez une erreur de compilateur.

Qu'en est-il de cette casting alors (int) ?? Pouvons-nous utiliser ceci pour convertir une chaîne en int trop?

Non, la coulée sur INT ne fonctionnera que pour des valeurs primitives et, en Java, une chaîne n'est pas primitive.


2 commentaires

wow..matanks à tous! Les choses ont un sens maintenant. Je viens d'essayer de passer un mot à parseint () ..it affiché une erreur en disant une exception dans le fil


@Happysoul exactement! Jetez un coup d'œil à la Javadoc pour cette méthode: java.sun.com/j2se/1.5.0/docs/1.5.0/docs/ajava/lang/... , remarquez qu'il affirme une exception numérique si la chaîne que vous passez n'est pas un in int.



1
votes

Commençons par le haut.

int notSoRandomNumber=(int) Math.random()*5;


0 commentaires

0
votes

Code suivant Convertissez la chaîne en Int sans aucune méthode xxx

sortie "3256" -> 3256


0 commentaires

0
votes
  1. Parse () La méthode est disponible est de nombreux formats, classe entier ayant la méthode parseint () qui est une méthode statique, nous appelons cette méthode par integer.parseint ()

  2. Double classe similaire ayant parsedouble () et nous l'appelons comme double.Parsedouble ().

  3. La manière la plus générique est xxxx.parsexxxx ()

  4. L'utilisation principale de cette méthode consiste à convertir n'importe quel objet en une primitive.

  5. Et ici, vous pouvez poser une question pourquoi nous devons convertir en primitives? La réponse est que nous savons que les primitives sont stockées dans la zone de pile et les objets sont stockés dans une zone de tas, et vous ne voulez pas gaspiller la mémoire du tas et vous pouvez convertir un objet en primitif.

  6. Et l'autre chose, tout en accédant à n'importe quel objet, il peut y avoir des frais généraux. Il est préférable d'utiliser comme primitif.


0 commentaires