2016-12-08 8 views
1

私は ユーザーが何かを入力し、入力にどのようなタイプのデータが出力されるのかを示すJavaプログラムを作成しますか?たとえば :データ型の認識

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

私は

+0

文字列からデータを解析します。 – GurV

+0

[入力の種類を確認していますか?](http://stackoverflow.com/questions/5333110/checking-input-type-how) –

+0

[この前の回答] (http://stackoverflow.com/a/40062753/2449857)はこれを行う方法を正確に示しています。 –

答えて

1

これはあなたの目的のために働く必要があります。

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"); 
    } 
} 

if...else文の順序は、ここで非常に重要であることパターンに関する以下の設定関係のために:

  1. すべてのバイトパターンは整数
  2. すべての整数パターンが
  3. すべてのフロートパターンが
  4. すべてのブール値は文字列ことができストリングスすることができ山車することができ

hasNext..()ScannerクラスのメソッドなどBigIntegershortのかなり多くがあります。 、 等々。詳細については、Scannerクラスのドキュメントを参照してください。

1

単純なアプローチはこのように行くことができるが、これをうまくする方法について無知だとして助けてください。 Xが整数として解析することができた場合は、いくつかの入力文字列 X.

  1. で始まる - >それがint/Integer型
  2. ある が
  3. そして、あなたはロング
  4. を試みることは次に
  5. を倍増その後
  6. フロート
  7. 何も動作しない場合は、おそらく文字列があります。

(「解析」とは、Integer.parseInt() ...あなたはXで渡します。そのメソッドが例外をスローしない場合、Xは整数/ intであることがわかります)

しかし、このようなの検出は、有効な入力の定義に大きく依存します。潜在的なマッピングが含まれます。文字列を解釈する方法が数多くあります。それは数字ではないかもしれません。正しい書式文字列を指定すると、タイムスタンプになる可能性があります。

非常に最初のステップ:要件を明確にしてください!サポートしなければならない潜在的な入力フォーマットを理解する。彼らの "マッピング"について考えてみてください。そのタイプを識別するための潜在的なチェックが含まれます。

+0

正常に実行されないと例外がスローされる可能性があります。例外をキャッチすることについて説明する方が良いでしょうか? – ItamarG3

+0

@ItamarGreen良い点;それに応じて私の答えを更新しました。 – GhostCat

1

あなたは文字列を取得し、他のタイプとして、それを解析しようとすることができます:

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

あなたにはヒントがあります。初心者に**空の**キャッチブロックを使用するように提案することは決してありません。それは超悪い練習です! – GhostCat

+0

@GhostCatはい、私は何が**そこに行かなければならないかを正確に説明する方法を考えていました – ItamarG3

関連する問題