Java Math.sqrt函数

Java Math.sqrt函数,java,joptionpane,Java,Joptionpane,当我尝试9时,它的输出是7.54,应该是3。为什么?input.charAt()返回字符,而不是数字的数值。这意味着您得到的是'9',而不是9。'9'的平方根是57,所以你最终要取它的平方根 请尝试Math.sqrt(input.charAt(0)-“0”) 如果要使代码更通用,请考虑使用或代替查看单个字符。 输入>字符()/代码>返回字符,而不是数字< /强>的数值。这意味着您得到的是'9',而不是9。'9'的平方根是57,所以你最终要取它的平方根 请尝试Math.sqrt(input.cha

当我尝试9时,它的输出是7.54,应该是3。为什么?

input.charAt()
返回字符,而不是数字的数值。这意味着您得到的是
'9'
,而不是
9
'9'
的平方根是
57
,所以你最终要取它的平方根

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

如果要使代码更通用,请考虑使用或代替查看单个字符。

<代码>输入>字符()/代码>返回<强>字符,而不是数字< /强>的数值。这意味着您得到的是
'9'
,而不是
9
'9'
的平方根是
57
,所以你最终要取它的平方根

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


如果你想让你的代码更通用一点,考虑使用或代替查看单个字符。

你的问题是使用九号ASCII代码而不是九作为整数。
    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(c)之后,现在将char转换为int

因此Math.Sqrt得到57作为参数


对于正确的工作,您应该将字符解析为整数,如Bala R

您的问题是,您使用的是9号ASCII码,而不是9号作为整数

    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(c)之后,现在将char转换为int

因此Math.Sqrt得到57作为参数

对于正确的工作,您应该将字符解析为整数,如Bala R

你也可以这样做-

char c = input.charAt(0);
将char转换为string并从字符串中解析double。

您也可以这样做-

char c = input.charAt(0);

将字符转换为字符串,并从字符串中解析出double。

@aix我可以知道为什么要添加-'0'?@jcdavy:我减去了
'0'
,因为这会将表示为字符的数字转换为其等效数字(即
'0'
变成
0
'1'
变成
1
,等等)@aix我可以知道为什么要加-'0'?@jcdavy:我减去了
'0'
,因为这会将表示为字符的数字转换为其等效数字(即
'0'
变成
0
'1'
变成
1
,等等)。