Math.sqrt函数

时间:2011-10-10 14:59:43

标签: java joptionpane

    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.为什么会这样?

3 个答案:

答案 0 :(得分:5)

input.charAt()会返回字符,而不是数字的数值。这意味着您获得了'9',而不是9'9'的{​​{3}}为57,因此您最终会获得平方根。

请尝试Math.sqrt(input.charAt(0) - '0')

如果您想让代码更通用一些,请考虑使用ASCII valueInteger.valueOf()而不是查看单个字符。

答案 1 :(得分:0)

你的问题是你使用9号ASCII码而不是9号整数。

char c = input.charAt(0);

之后执行Math.Sqrt(c),现在将char转换为int。

所以Math.Sqrt得到57作为参数。

为了正确的工作,你应该将字符解析为整数,就像Bala R回答的那样。

答案 2 :(得分:0)

你也可以 -

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

将char转换为string并从字符串中解析double。