为什么charAt的工作方式不同,具体取决于打印为

时间:2017-10-25 01:26:31

标签: java char primitive charat

public class MyClass 
{
    public static void main(String args[]) 
    {
        String a = "(4 + 4i)";
        String b = "(2 + 3i)";
        int g = 1;
        int c = a.charAt( g ); // sets c to 52
        System.out.println( c ); // prints 52
        System.out.println( (double) a.charAt( g ) ); // prints 52.0
        System.out.println( a.charAt( g ) ); // prints 4
        System.out.println( 2 * a.charAt( g ) ); // prints 104
    }
}

我试图编写代码来乘以虚数,这就是为什么我在字符串中有“i”的原因。所以我想先拿,然后转换为int或double。这给了我52令我困惑的事。然而,当我直接打印到控制台时,它工作,但只有没有双。这没用,因为我需要在其他地方使用它。那么这里发生了什么?尝试解析字符串a和int或double的部分是否更好?是否可以在不使用解析的情况下操作字符串中的数字?是否有可以处理虚数的方法,即“e ^ pi * i = 1”?

2 个答案:

答案 0 :(得分:2)

字符串是一系列符号,例如字母,标点符号和数字,称为字符。每个字符都与一个数字相关联。一种常见的方法是使用所谓的ASCII字符。在这种情况下,您会看到字符'4'由数字52表示。

考虑到这一点,让我们看看你的一些代码:

int c = a.charAt( g );

此行以静默方式将字符转换为其数值。通过"数值"我的意思是代表字符的数字,而不是数字本身的值。在这种情况下,字符'4'的数值为52

System.out.println( a.charAt( g ) ); // prints 4

打印出字符 '4',而不是int 4。了解数字字符及其整数值之间的区别非常重要。

为了获得数字4以便您可以执行算术运算,您必须解析String。函数Integer.valueOf()对此有很大的帮助。

您还应该了解类和对象。例如,您可以创建一个Complex类,它允许您将复数用作具有自己操作的单个实体。

要获取所需的数值,您需要使用Integer.valueOf()Double.valueOf(),具体取决于您是想要int还是double

int c = Integer.valueOf(a.charAt(g))

如果要允许具有多个数字或小数点的数字,则需要使用更复杂的解析方法。

答案 1 :(得分:0)

你得到52,因为'4'的ascii值是52。

System.out.println("(4 + 4i)".charAt(1) == '4'); // '4' == '4'
System.out.println((int) '4'); // <-- 52

如果您想将char转换为&#39; int值,您需要检查它是否在预期范围内,然后解析它。您可以从值中减去'0',或使用Character.digit - 如

char c = '4';
if (c >= '0' && c <= '9') {
    System.out.println((int) (c - '0'));
    System.out.println(Character.digit(c, 10));
}

最后,System#outPrintStream,它提供了重写方法来编写int(或charString,或者double等。)