Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我想更多地了解这部分代码的功能_Java - Fatal编程技术网

Java 我想更多地了解这部分代码的功能

Java 我想更多地了解这部分代码的功能,java,Java,在中有一个问题,我正在搜索其他额外的输入来理解这个问题。我遇到了下面的代码,他们说他们使用了备忘录。我无法理解数组的用法,有人能解释一下代码吗?我想发展自己的逻辑并使用它 import java.util.Scanner; class Coins { long r[] = new long[1000000]; public long Coin(long n) { if (n == 0) { return 0;

在中有一个问题,我正在搜索其他额外的输入来理解这个问题。我遇到了下面的代码,他们说他们使用了备忘录。我无法理解数组的用法,有人能解释一下代码吗?我想发展自己的逻辑并使用它

  import java.util.Scanner;

     class Coins {
     long r[] = new long[1000000];

      public long Coin(long n) {
        if (n == 0) {
            return 0;
        }
        if (n < 12) {
            return n;
        }

        if (n < 1000000) {
            if (r[(int) n] > 0) {
                return r[(int) n];
            }
        }

        long m = Math.max(n, Coin(n / 2) + Coin(n / 3) + Coin(n / 4));

        if (n < 1000000) {
            r[(int) n] = m;
            return m;
        }
    }

    public static void main(String[] args) throws java.lang.Exception {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLong()) {
            long n = sc.nextLong();
            Coins i = new Coins();
            long r = i.Coin(n);
            System.out.println(r);
         }
      }
   }
import java.util.Scanner;
等级硬币{
长r[]=新长[1000000];
公众长币(长n){
如果(n==0){
返回0;
}
if(n<12){
返回n;
}
如果(n<1000000){
如果(r[(int)n]>0){
返回r[(int)n];
}
}
长m=数学最大值(n,硬币(n/2)+硬币(n/3)+硬币(n/4));
如果(n<1000000){
r[(int)n]=m;
返回m;
}
}
公共静态void main(字符串[]args)引发java.lang.Exception{
扫描仪sc=新的扫描仪(System.in);
while(sc.hasNextLong()){
长n=sc.nextLong();
硬币i=新硬币();
长r=i.硬币(n);
系统输出println(r);
}
}
}

该阵列用作内部缓存。它缓冲
Math.max(n,硬币(n/2)+硬币(n/3)+硬币(n/4))的结果
,用于
n
的“小”输入(
<1000000
)。如果多次使用相同的输入参数,则可以避免重新计算结果


对于较小的值(
0),您可以格式化代码吗?您到底在理解哪些部分时遇到困难?函数coin调用了多次,数组的作用是什么?请在尝试格式化代码之前阅读此帮助页(您上次的编辑使情况变得更糟):
if (n < 1000000) {
    if (r[(int) n] > 0)
        return r[(int) n];
}
if (n < 1000000)
    r[(int) n] = m;