Функция Math.sqrt - PullRequest
       2

Функция Math.sqrt

1 голос
/ 10 октября 2011
    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 ]

5 голосов
/ 10 октября 2011

input.charAt() возвращает символ, а не числовое значение цифры . Это означает, что вы получаете '9', а не 9. Значение ASCII из '9' равно 57, поэтому вы получите квадратный корень из этого.

Попробуйте Math.sqrt(input.charAt(0) - '0').

Если вы хотите сделать свой код немного более универсальным, рассмотрите возможность использования Integer.valueOf() или Double.valueOf() вместо просмотра отдельных символов.

0 голосов
/ 10 октября 2011

Вы также можете сделать -

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

Превратить символ в строку и отделить дважды от строки.

0 голосов
/ 10 октября 2011

Ваша проблема в том, что вы используете код ASCII номер девять, а не девять, как целое число.

char c = input.charAt(0);

после этого вы выполняете Math.Sqrt (c), теперь символ приводится к int.

поэтому Math.Sqrt получает 57 в качестве параметра.

Для правильной работы вы должны разобрать персонажа в Integer, как ответил Бала Р.

...