2011-10-10 39 views
1
import javax.swing.JOptionPane; 

public class PredefinedClass { 
    public static void main(String[] args){ 
     do{ 
      String input = JOptionPane.showInputDialog("Enter a character:"); 
      if(input.length() > 1){ 
       JOptionPane.showMessageDialog(null,"Invalid Input. Input a character only."); 
      }else if(Character.isLetter(input.charAt(0))){ 
       if(Character.isUpperCase(input.charAt(0))){ 
        JOptionPane.showMessageDialog(null,"The character is an Uppercase letter."); 
       }else if(Character.isLowerCase(input.charAt(0))){ 
        JOptionPane.showMessageDialog(null,"The character is a Lowercase letter."); 
       } 
      }else if(Character.isDigit(input.charAt(0))){ 
       JOptionPane.showMessageDialog(null,"The character is a digit."+ 
                "\nThe square root of "+input+" is "+Math.sqrt(input.charAt(0))); 

      } 
     }while(JOptionPane.showConfirmDialog(null,"Try again?[Y/N]","Try again?[Y/N]",JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION); 
    } 
} 

Math.sqrt(input.charAt(0))當我嘗試9它輸出7.54應該是3.爲什麼?Math.sqrt函數

回答

5

input.charAt()返回字符,而不是數字的數字值。這意味着你得到'9',而不是9ASCII value'9'57,所以你最終採取的平方根。

嘗試Math.sqrt(input.charAt(0) - '0')代替。

如果您想讓代碼更具通用性,請考慮使用Integer.valueOf()Double.valueOf()而不是查看單個字符。

+0

爲了解決這個問題:'Math.sqrt(input.charAt(0) - '0')' – Joost

+0

@aix可我知道你爲什麼要添加 - '0'? – Zhianc

+1

@jcdavid:當我將表示爲字符的數字轉換爲數字等值(即「0」變爲「0」,「1」變爲「1」)時,我減去了'0',依此類推)。 – NPE

0

你的問題是,你用九數ASCII碼不是9的整數。

char c = input.charAt(0); 

之後,您執行Math.Sqrt(c),現在char被轉換爲int。

所謂的Math.Sqrt得到57參數。

爲了正常工作,你應該人物解析到整型像巴拉 - [R回答。

0

你也可以做 -

Math.sqrt(Double.parseDouble(String.valueOf(input.charAt(0)))); 

打開字符字符串並解析字符串雙。