2016-12-08 1 views
1

Je veux créer un programme Java où un utilisateur saisiront quelque chose et la sortie montrera quel type de données est l'entrée ..? Par exemple:reconnaissance de type de données

Input: 25 
Output: integer 
Input: ABC 
Output: string 
Input: 12.7 
Output: float/double. 

S'il vous plaît aider comme je suis désemparés sur la façon de travailler sur cette

+0

Rechercher les données d'analyse de la chaîne – GurV

+0

Copie possible de [Vérification du type d'entrée ... comment?] (Http://stackoverflow.com/questions/5333110/checking-input-type-how) –

+0

[This answer answer] (http://stackoverflow.com/a/40062753/2449857) montre exactement comment faire cela. –

Répondre

1

Cela devrait fonctionner à votre objectif:

import java.util.Scanner; 

public class DataType 
{ 
    public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 
     if(in.hasNextByte(2)) 
     System.out.println("Byte"); 
     else if(in.hasNextInt()) 
     System.out.println("Integer"); 
     else if(in.hasNextFloat()) 
     System.out.println("Float"); 
     else if(in.hasNextBoolean()) 
     System.out.println("Boolean"); 
     else if(in.hasNext()) 
     System.out.println("String"); 
    } 
} 

Notez que l'ordre des if...else déclarations est ici très important en raison des relations d'ensemble suivantes en ce qui concerne les modèles:

  1. Tous les modèles d'octets peuvent être des entiers
  2. Tous les modèles entiers peuvent être flotteurs
  3. Tous les modèles flottants peuvent être des chaînes
  4. Tous les booléens peuvent être des chaînes

Il y a pas mal de hasNext..() méthodes dans la classe Scanner, tels que BigInteger, short , etc. Vous pouvez consulter la documentation de la classe Scanner pour plus de détails.

1

Une approche simple pourrait se présenter comme suit; en commençant par une entrée chaîne X.

  1. Si X peut être analysé comme entier -> est un int/entier
  2. vous essayez ensuite long
  3. Puis Float
  4. puis double
  5. Si rien n'a fonctionné, vous avez probablement une chaîne là

(avec "analyse" je veux dire en utilisant des méthodes telles que Integer.parseInt() ... vous passez dans X; et quand cette méthode ne lance pas d'exception sur vous, vous savez que X est un entier/int)

Mais: une telle détection dépend beaucoup de votre définition d'entrées valides; et les mappages potentiels. Comme il y a des milliards de façons d'interpréter une corde. Ce n'est peut-être pas un nombre. mais étant donné une chaîne de format correcte ... il pourrait être l'horodatage.

Ainsi, la première étape: clarifier vos besoins! Comprendre les formats d'entrée potentiels que vous devez supporter alors pensez à leur "cartographie"; et une vérification potentielle pour identifier ce type.

+0

Très probablement une exception sera levée si pas fait correctement. Ne vaudrait-il pas mieux expliquer comment attraper l'exception? – ItamarG3

+0

@ItamarGreen Bon point; J'ai mis à jour ma réponse en conséquence. – GhostCat

1

Vous pouvez obtenir une chaîne et d'essayer de l'analyser comme d'autres types:

Scanner s = new Scanner(System.in);//allows user input 
input = s.nextLine();//reads user input 
try{//java will try to execute the code but will go to the catch block if there's an exception. 
    int inputInt = Integer.parseInt(input);//try to convert input to int 
catch(Exception e){ 
    e.printStackTrace();//this tell you exactly what went wrong. If you get here, then the input isn't an integer. 
} 
//same with double 
+0

Maintenant un indice pour vous: ne jamais suggérer à un débutant d'aller avec un bloc de capture ** vide **. C'est une super mauvaise pratique! – GhostCat

+0

@GhostCat Oui, je pensais exactement comment expliquer ce que ** devrait ** y faire – ItamarG3