当前位置: 首页 > 知识库问答 >
问题:

如何将Java代码写入JavaScript

慕容弘懿
2023-03-14

我正在努力将Java代码转换为javascript。为此,例如,我正在将public静态int primesolution转换为函数primesolution。我不太知道我是否在转换它的正确轨道上。我被困在公共静态空main(String[]args)中。如何将此函数转换为Javascript。非常感谢任何帮助。

import java.lang.Math;
public class EvaluateDivisors {

     public static void main(String[] args) {
        try {
            long a = Long.parseLong(args[0]);
            long b = Long.parseLong(args[1]);
            int k = Integer.parseInt(args[2]);

            if (a <= 1 || b <= a) {
                error("Error: must have 1 < A < B");
            }
            if (k <= 0 || k % 2 == 0) {
                error("Error: K must be a positive odd number");
            }
            System.out.println(solution(a, b, k));
        } catch (IndexOutOfBoundsException e) {
            error("Usage: EvaluateDivisors A B K");
        } catch (NumberFormatException e) {
            error("Error: arguments must be integers");
        }
    }


    private static int solution(long a, long b, int k) {


        if (prime(k)) {
            return primeSolution(a, b, k);
        }
        int result = 0;

         for (long n = (long) Math.sqrt(a); n*n <= b; n++) {

           int divisors = 3;


            for (long m = 2; m < n && divisors <= k; m++) {
                if (n*n % m == 0) {
                    divisors += 2;
                }
            }
            if (divisors == k) {
                result++;
            }
        }
        return result;
    }


      private static int primeSolution(long a, long b, int k) {
        int result = 0;


        int n = 2;
        while (Math.pow(n, k - 1) < a) {
            n++;
        }
        while (Math.pow(n, k - 1) <= b) {
            if (prime(n++)) {
                result++;
            }
        }
        return result;
    }


    private static boolean prime(int n) {

        for (int m = 2; m <= Math.sqrt(n); m++) {
            if (n % m == 0) {
                return false;
            }
        }
        return true;
    }
    private static void error(String message) {
        System.err.println(message);
        System.exit(1);
    }

}

我用JavaScript转换的代码

function EvaluateDivisors {

    function main(String[] args) {
        try {
            long a = Long.parseLong(args[0]);
            long b = Long.parseLong(args[1]);
            int k = Integer.parseInt(args[2]);

            if (a <= 1 || b <= a) {
                error("Error: must have 1 < A < B");
            }
            if (k <= 0 || k % 2 == 0) {
                error("Error: K must be a positive odd number");
            }
            System.out.println(solution(a, b, k));
        } catch (IndexOutOfBoundsException e) {
            error("Usage: EvaluateDivisors A B K");
        } catch (NumberFormatException e) {
            error("Error: arguments must be integers");
        }
    }


    function solution(long a, long b, int k) {

        if (prime(k)) {
            return primeSolution(a, b, k);
        }
        int result = 0;

        for (long n = (long) Math.sqrt(a); n*n <= b; n++) {

            int divisors = 3;

            for (long m = 2; m < n && divisors <= k; m++) {
                if (n*n % m == 0) {
                    divisors += 2;
                }
            }
            if (divisors == k) {
                result++;
            }
        }
        return result;
    }

    function primeSolution(long a, long b, int k) {
      int result = 0;

       int n = 2;
      while (Math.pow(n, k - 1) < a) {
          n++;
      }
      while (Math.pow(n, k - 1) <= b) {
          if (prime(n++)) {
              result++;
          }
      }
      return result;
  }


        function prime(int n) {
        for (int m = 2; m <= Math.sqrt(n); m++) {
            if (n % m == 0) {
                return false;
            }
        }
        return true;
    }

    function error(String message) {
        console.log(message);
        System.exit(1);
    }

}

共有1个答案

齐献
2023-03-14

您应该使用事件侦听器进行文档加载(它将在加载html后执行其内容):

document.addEventListener("DOMContentLoaded", function(){
    // Your main() code here
});

or change it to classic function with parameters like this:

function mainFunction(yourVar)

然后,JS是动态类型化语言,所以必须使用int、long、string等的通用变量istead。

然后,您可以将其他函数与上面的函数并排放置,因此最终的javascript代码如下所示:

// Use function like this:
// function yourFunction(parameter1, parameter2, ...) {
// or use document DOMContentLoaded event listener:
function yourFunction(a, b, k) {
    try {
        if (a <= 1 || b <= a) {
            error("Error: must have 1 < A < B");
        }
        if (k <= 0 || k % 2 == 0) {
            error("Error: K must be a positive odd number");
        }
        console.log(solution(a, b, k));
    } catch(e) {
        error("Usage: EvaluateDivisors A B K");
    }
};

function solution(a, b, k) {  
    if (prime(k)) {
        return primeSolution(a, b, k);
    }
    var result = 0;

    for (var n = Math.sqrt(a); n * n <= b; n++) {

        var divisors = 3;

        for (var m = 2; m < n && divisors <= k; m++) {
            if (n * n % m == 0) {
                divisors += 2;
            }
        }
        if (divisors == k) {
            result++;
        }
    }
    return result;
}

function primeSolution(a, b, k) {
    var result = 0;

    var n = 2;
    while (Math.pow(n, k - 1) < a) {
        n++;
    }
    while (Math.pow(n, k - 1) <= b) {
        if (prime(n++)) {
            result++;
        }
    }
    return result;
}


function prime(n) {
    for (var m = 2; m <= Math.sqrt(n); m++) {
        if (n % m == 0) {
            return false;
        }
    }
    return true;
}

function error(message) {
    console.log(message);
}

我建议您使用JavaScript验证程序:http://esprima.org/demo/validate.html

然后调试浏览器控制台(在windows上,您可以使用F12在几乎任何浏览器中打开它)

而要在w3学校上搜索帮助,其令人敬畏的帮助来源:https://www.w3schools.com/js/

 类似资料:
  • 我有一个wordpress插件,可以上传用户头像。我正在尝试使用一段显示缩略图的代码,并将其放在一个短代码中,这样我就可以将缩略图放在网站的任何位置。 我对php比较陌生,我知道如何为wordpress启动一个短代码,但我不知道如何构造短代码来承载php。有谁能给我提个建议吗? php下面的代码是插件文件的原文: 我想放在短代码中的代码如下,基本上它显示了缩略图。我试图用这个在functions.

  • 问题内容: 我已经在Swift中编写了一个库,但无法将其导入到用Objective-C编写的当前项目中。 有什么方法可以导入吗? 问题答案: 您需要导入。请注意,这是目标名称-其他答案会导致使用类名称的错误。 这个单个文件是一个自动生成的标头,它为项目中所有用注释或继承的Swift类定义了Objective-C接口。 注意事项: 如果您的目标名称包含空格,请用下划线替换(例如,成为) 如果目标是框

  • 问题内容: 我一直在尝试将数组写入文件。我知道如何将整数或字符串写入文件,但是要带一个数组会使我感到困惑。我现在正在使用这个: 问题答案: 就像其他人说的那样,您可以循环遍历数组并逐个打印出元素。为了使输出显示为数字而不是您看到的“字母和符号”,您需要将每个元素转换为字符串。因此,您的代码将如下所示: 如果您只想打印类似的数组,则可以使用此衬纸替换循环:

  • 我需要使用restAssuret-java创建测试来测试REST API。为了获得一个身份验证令牌(OAuth2.0),我需要发送来自邮递员的请求,如下面的屏幕所示。但是,在java测试中,我不能使用Postman。你知道获取身份验证令牌的java代码应该是什么样子吗?

  • 问题内容: 我有一个这样的课: 成本,利润和标价列为“ BigDecimal”,因为在原始(C#)应用中,它们为Decimal 因此定义了相应的SQLite表: 最接近Decimal(C#)或BigDecimal(Java)的SQLite是REAL,这是SQLite唯一的浮点数据类型。 在扩展SQLiteOpenHelper的类中,我试图从表中选择值并将它们存储在我的自定义类类型的ArrayLis

  • 问题内容: 我想发送多个随机值。我认为数组是发送它们的最佳方法。但是我不知道如何向Socket写一个数组? 我的Java课: 导入java.io.ByteArrayOutputStream; 导入java.io.IOException; 导入java.io.InputStream; 导入java.net.Socket; 导入java.io. *; 导入java.util.Random; 问题答案: