2011-06-24 3 views
3

Je suis en train de rencontrer un problème en déterminant si l'entrée de l'utilisateur est un int ou un double.Détermination de l'entrée pour la méthode surchargée

Voici un exemple:

public static int Square(int x) 
{ 
    return x*x; 
} 

public static double Square(double x) 
{ 
    return x*x; 
} 

je dois savoir comment déterminer en fonction du scanner si l'entrée est un int ou double pour les méthodes ci-dessus. Cependant, comme c'est mon premier cours de programmation, je n'ai pas le droit d'utiliser quoi que ce soit qui n'ait pas été enseigné - ce qui dans ce cas, a été la base. Y a-t-il une possibilité de prendre l'entrée sous forme de chaîne et de vérifier s'il y a un '.' impliqué et ensuite stocker cela dans un int ou double? Enfin, je ne vous demande pas de le programmer, mais plutôt de m'aider à trouver une solution. Toute aide est appréciée :)

+1

On dirait une classe amusante. – CtrlDot

Répondre

2

Le scanner a un tas de méthodes comme hasNextInt, hasNextDouble, etc. que vous dire si le « jeton suivant lu par le Scanner peut être interprété comme un (autre) ».

+0

Le problème avec l'utilisation de méthodes telles que hasNextInt, etc. est que ce sont des choses qui n'ont pas été enseignées en classe, et par conséquent, dans les yeux du professeur, ils ne sont pas autorisés. J'apprécie l'aide :) Y at-il un autre type de solution pour contourner cela? – Miranda

+2

Je déteste vraiment ce genre de bêtises dans les classes CS :) Il serait utile si nous savions exactement ce que vous êtes autorisé à utiliser ... –

+0

Cela a été une classe CS vraiment basique - nous avons appris à créer des classes (constructeurs , successeurs, mutateur, assistant), boucles (do-while, while, for, if, if-else, etc). Nous venons à peine d'apprendre à appeler une méthode sans avoir à créer l'objet. (Espérons que cela a été correctement indiqué - en appelant fondamentalement Math.whatever()). (Peut-être devrais-je demander si l'appel d'une classe/méthode est un jeu gratuit à ce stade) La classe scanner a été juste limitée à nextInt, nextDouble, next. Je ne sais pas vraiment quoi d'autre à énumérer qui serait utile/guide pour m'aider à résoudre mon problème ci-dessus. – Miranda

0

peut être vérifié comme celui-ci

  if(scanner.hasNextDouble()} 
      { 
       System.out.println("Is double"); 
      } 


      if(scanner.hasNextDouble()} 
      { 
       System.out.println("Is double"); 
      } 
+0

Regardez la faute de frappe à la condition - if (scanner.hasNextDouble()) est ce que vous vouliez dire. Aussi, il est bon de noter que pour vérifier l'élément suivant, il faut appeler next() ou nextDouble(). Donc, entre ces deux conditions, il faut passer un appel à scanner.next(). –

1

Puisque vous avez mentionné que vous avez appris the Scanner object, je suppose que les méthodes de cette classe sont à votre disposition pour votre usage. Dans ce cas, vous pouvez détecter si une entrée est un nombre entier, double ou simplement obtenir une ligne entière. Les méthodes que vous seriez plus être intéressé ici serait la méthode hasNextDouble() (retourne un boolean indiquant si oui ou non le jeton courant dans le Scanner est en fait un double ou non) et la méthode nextDouble() (si le prochain jeton dans le Scanner est en fait une double, l'analyser à partir du Scanner comme un). C'est probablement la meilleure direction pour déterminer les types d'entrée à partir d'un fichier ou d'une entrée standard.

Une autre option consiste à utiliser les méthodes statiques wrapper classes pour convertir des valeurs. Ceux-ci sont généralement nommés comme Integer.parseInt(str) ou Double.parseDouble(str) qui convertira un objet String donné en type de base approprié. Voir la méthode des classes DoublepasrseDouble(String s) pour plus de détails. Il pourrait être utilisé de cette façon:

String value = "123.45" 
double convertedValue = 0.0; 

try { 
    convertedValue = Double.parseDouble(value); 
} catch (NuberFormatException nfe) { 
    System.err.println("Not a double"); 
} 

Cette méthode est probablement mieux utilisé pour les valeurs qui existent dans l'application déjà et doivent être vérifiés (il serait exagéré de construire un Scanner sur un petit String à cet effet).

Enfin, encore un autre potentiel (mais pas très propre, simple, ou probablement technique correcte) pourrait regarder l'objet String directement et en essayant de trouver s'il contient un point décimal, ou d'autres indicateurs qu'il est en fait un double. Vous pouvez être en mesure d'utiliser indexOf(String substr) pour déterminer si elle apparaît dans le String jamais. Je suppose que cette méthode a beaucoup de problèmes potentiels (par exemple, si le String a plusieurs '.' Caractères?). Je ne suggérerais pas cette route parce que c'est une erreur sujette et difficile à suivre. Cela pourrait être une option si c'est ce que sont les contraintes, cependant.

Donc, à mon humble avis, vos options devrait aller comme suit:

  1. Utilisez les méthodes ScannerhasNextDouble() et nextDouble()
  2. Utilisez les méthodes de classe wrapper Double.parseDouble(String s)
  3. Utilisez String méthodes pour tenter d'identifier la valeur (éviter cette technique à tout prix si l'une des options ci-dessus est disponible).
1

Puisque vous pensez que vous ne serez pas autorisé à utiliser les méthodes Scanner, vous pouvez essayer plusieurs solutions. Vous avez mentionné la vérification pour voir si une chaîne contient un .. Pour ce faire, vous pouvez utiliser la méthode contains sur String.

"Some words".contains("or") // evaluates to true 

Le problème avec cette approche est qu'il ya beaucoup de chaînes qui contiennent . mais ne sont pas des nombres à virgule. Pour des exemples, des phrases, des URL et des adresses IP. Cependant, je doute que vous êtes un conférencier essaie de vous attraper et vous donnera probablement des ints et des doubles. Donc, à la place, vous pourriez essayer de lancer. La conversion d'un double en nombre entier entraîne la suppression de la partie décimale du nombre à supprimer.

double doubleValue = 2.7; 

int castedDoubleValue = (int) doubleValue; // evaluates to 2 

double integerValue = 3.0; 

int castedIntegerValue = (int) integerValue; // evaluates to 3 

Espérons que cela devrait être suffisant pour vous aider à écrire une solution au problème.

Questions connexes