为什么 charAt 的工作方式因打印的数据类型而异
Why does charAt work differently depending on the data type it is printed as
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"?
字符串是一系列符号,例如字母、标点符号和数字,称为字符。每个字符都与一个数字相关联。一种常见的方法是使用所谓的 ASCII 字符。在本例中,您会看到字符 '4'
由数字 52
.
表示
考虑到这一点,让我们看一下您的一些代码:
int c = a.charAt( g );
这一行默默地将字符转换为其数值。 "numerical value" 我的意思是表示字符的数字,而不是数字本身的值。在这种情况下,字符 '4'
的数值为 52
.
System.out.println( a.charAt( g ) ); // prints 4
这会打印出 字符 '4'
,而不是 int
4
。了解数字字符与其整数值之间的区别非常重要。
为了得到数字4
以便进行算术运算,必须解析String
。函数 Integer.valueOf()
对此有很大帮助。
您还应该了解 classes 和对象。例如,您可以创建一个 Complex
class,这将允许您将复数用作具有其自身操作的单个实体。
要获得所需的数值,您需要使用 Integer.valueOf()
或 Double.valueOf()
,具体取决于您想要 int
还是 double
:
int c = Integer.valueOf(a.charAt(g))
如果你想允许多位数或小数点的数字,你将需要使用更复杂的解析方法。
你得到 52 因为 '4'
的 ascii 值是 52.
System.out.println("(4 + 4i)".charAt(1) == '4'); // '4' == '4'
System.out.println((int) '4'); // <-- 52
如果要将 char
转换为它的 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#out
is a PrintStream
,它提供重载方法来编写 int
(或 char
,或 String
,或 double
等)。
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"?
字符串是一系列符号,例如字母、标点符号和数字,称为字符。每个字符都与一个数字相关联。一种常见的方法是使用所谓的 ASCII 字符。在本例中,您会看到字符 '4'
由数字 52
.
考虑到这一点,让我们看一下您的一些代码:
int c = a.charAt( g );
这一行默默地将字符转换为其数值。 "numerical value" 我的意思是表示字符的数字,而不是数字本身的值。在这种情况下,字符 '4'
的数值为 52
.
System.out.println( a.charAt( g ) ); // prints 4
这会打印出 字符 '4'
,而不是 int
4
。了解数字字符与其整数值之间的区别非常重要。
为了得到数字4
以便进行算术运算,必须解析String
。函数 Integer.valueOf()
对此有很大帮助。
您还应该了解 classes 和对象。例如,您可以创建一个 Complex
class,这将允许您将复数用作具有其自身操作的单个实体。
要获得所需的数值,您需要使用 Integer.valueOf()
或 Double.valueOf()
,具体取决于您想要 int
还是 double
:
int c = Integer.valueOf(a.charAt(g))
如果你想允许多位数或小数点的数字,你将需要使用更复杂的解析方法。
你得到 52 因为 '4'
的 ascii 值是 52.
System.out.println("(4 + 4i)".charAt(1) == '4'); // '4' == '4'
System.out.println((int) '4'); // <-- 52
如果要将 char
转换为它的 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#out
is a PrintStream
,它提供重载方法来编写 int
(或 char
,或 String
,或 double
等)。