我无法理解我的一位讲师所讲的内容。
任务是:
- 假设我们从命令行获取了一个数字。
- 复制那个数字。
给定的代码是:
public class Duplicate{
public static void main(String[] args){
r = r * 10 + ch - '0';
System.out.println();
}
System.out.println(r*2);
}
}
好吧,我知道这是行得通的,但我不明白是怎么做到的。然后我决定显示这段代码每一行的结果。
public class Duplicate{
public static void main(String[] args){
int r = 0;
for (int i = 0; i < args[0].length(); i++){
System.out.println("Iteration " + i);
System.out.println("Initial value of 'r' for this iteration = " + r);
char ch = args[0].charAt(i);
System.out.println("charAt(i) = " + args[0].charAt(i));
System.out.println("r * 10 = " + Integer.toString(r * 10));
System.out.println("r * 10 + ch = " + Integer.toString(r * 10 + ch));
System.out.println("r * 10 + ch - '0' = " + Integer.toString(r * 10 + ch - '0'));
r = r * 10 + ch - '0';
System.out.println();
}
System.out.println(r*2);
}
}
结果是:
Iteration 0
Initial value of 'r' for this iteration = 0
charAt(i) = 3
r * 10 = 0
r * 10 + ch = 51
r * 10 + ch - '0' = 3
Iteration 1
Initial value of 'r' for this iteration = 3
charAt(i) = 2
r * 10 = 30
r * 10 + ch = 80
r * 10 + ch - '0' = 32
64
老实说,我是抓不住机制的。你能逐行说明发生了什么吗?
最佳答案
从表面上看,您正在将整数的字符串表示形式转换为整数。
对于循环的每次迭代,您都会得到第一个“未使用”的字符。然后将其“附加”到结果整数。
让我们分解你的公式:
r = r * 10 + ch - '0'
为了更好地理解这一点,我将其重写为:
int currentCharacterValue = ch - '0';
r = r * 10 + currentCharacterValue;
假设您有字符串“123”。首先,r 被初始化为 0。
循环的第一次迭代:
ch = '1'
currentCharacterValue = '1' - '0' = 49 - 48 = 1 ('1' is 49 in ASCII and '0' is 48)
r = 0 * 10 + 1 = 1
循环的第二次迭代:
ch = '2'
currentCharacterValue = '2' - '0' = 50 - 48 = 2
r = 1 * 10 + 2 = 12
循环的第三次迭代:
ch = '3'
currentCharacterValue = '3' - '0' = 51 - 48 = 3
r = 12 * 10 + 3 = 123
所以你最终得到 r = 123,它是“123”字符串的整数表示。完成后,您只需将 r 乘以 2 即可得到最终结果(因为 Java 只能理解数值的乘法,而不能理解字符串的乘法)。希望这对您有所帮助!
关于java - 复制程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20594246/