2016-08-02 69 views
0
Scanner sc = new Scanner(System.in); 
System.out.println("Enter whatever you want"); 
String st = sc.nextLine(); 
try { 
    String d = String.valueOf(st); 
    if (d == (String) d) { 
     System.out.println((String) d); 
    } else { 
     System.out.println(d); 
    } 
} catch(Exception e) { 
    System.out.println("integer"); 
} 

當我嘗試執行此操作時,即使對於整數和雙精度值,它也會一直打印「if」部分。找出用戶是否輸入了字符串,整數或雙精度值

+1

嘗試將其解析到一個號碼類型和捕獲異常... –

+3

由於'd'已經是'String'了,所以將它轉換爲'String'是多餘的;那麼'd == d'顯然總是如此;但是檢查'd == d'是多餘的,因爲你在true和false分支中都做同樣的事情。而'String.valueOf(st)'也是多餘的,因爲'st'已經是'String',所以'st.toString()== st''。 –

+0

要知道用戶輸入了什麼,你可以使用'instanceof'或顯然使用sc.hasNextDouble()或hasNextInt() – Imran

回答

1

爲了使用您的代碼: 嘗試首先解析爲整數。如果這是成功的意味着你有一個int。如果這不起作用,嘗試解析到一個double,如果這個工作,它意味着你有一個double,否則你有一個字符串。

使用Integer.valueOfDouble.valueOf

System.out.println("Enter whatever you want"); 
    String st = sc.nextLine(); 
    try { 
     Integer d = Integer.valueOf(st); 

     System.out.println("Integer: " + d); 
    } catch (NumberFormatException e) { 
     try { 
      Double d = Double.valueOf(st); 
      System.out.println("Double: " + d); 
     }catch (NumberFormatException nf) { 
      System.out.println("String: " + st); 
     } 
    } 

但我不會建立這種方式。更好的選擇是使用sc.hasNextIntsc.hasNextDouble

+1

可能是@ Mureinik的回答是比較相關的 – Imran

-1

試試這個:

String d= String.valueOf(st); 
try{ 
//If double or integer comes here 
    double val = Double.parseDouble(d); 
}catch(Exception e){ 
    //If String comes here 
} 
1

任何輸入可以作爲字符串進行評估,即使是「2.9」。相反,你可以使用ScannerhasXYZ方法:

if (sc.hasNextInt()) { 
    System.out.println("Integer"); 
} else if (sc.hasNextDouble()) { 
    System.out.println("Double"); 
} else { 
    System.out.println("String"); 
} 
0

您可以使用該程序的輸出類型:

import java.util.Scanner; 

public class MyTest { 
public static void main(String args[]) throws Exception { 
    Scanner sc = new Scanner(System.in); 

    System.out.println("Enter whatever you want"); 

    String st = sc.nextLine(); 
    try { 
     Integer.parseInt(st); 
     System.out.println("Integer"); 
    } catch (NumberFormatException nfe) { 

     try { 
      Double.parseDouble(st); 
      System.out.println("Double"); 
     } catch (NumberFormatException nfe2) { 
      System.out.println("String"); 
     } 

    } 
    sc.close(); 
} 
} 
相關問題