java - 复制程序

标签 java

我无法理解我的一位讲师所讲的内容。

任务是:

  1. 假设我们从命令行获取了一个数字。
  2. 复制那个数字。

给定的代码是:

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/

相关文章:

Java反编译代码含义

java - 从静态方法调用和写入数组时如何停止无限循环

java - 来自 Activity.onStart() 的静态上下文

java - 在Java中获取给定范围之间的随机数

java - 使用Java Server Pages,提交后如何制作 "register"表单数据

java - Spring 中 'Sort exceeded memory limit' MongoDb 的问题

java - Java程序的vmstat pidstat结果分析

java - 字符串格式化

java - LibGDX 将文本文件加载到扫描仪时出现问题

java - 团体捕获的预期结果?