【解決方法】Java コードを JavaScript に変換する方法

プログラミングQA


am struggling to convert Java code into javascript. For that, for example, I am converting public static int primesolution into function primesolution. I do not have much idea whether I am on the right track of converting it. I am stuck with public static void main(String[] args). How to convert this function into Javascript. Any help is highly appreciated.
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);
    }

}

私が試したこと:

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

それはうまくいかないので、あなたはしません。
この 2 つの言語は同じ環境では動作しません。コード自体を「翻訳」することは可能かもしれませんが、それらを取り巻くフレームワークは大きく異なります。 まず第一に、あなたが示している Java コードは、Javascript にはないコマンド ライン パラメータで動作します。

代わりに、宿題の質問に腰を下ろし、設定されたタスクを実行する独自のコードを作成してみてください (これは素因数に関係しているように見えます)。 コピー アンド ペーストの解決策ではコースに合格できません。最終試験に到達したときに、コピー アンド ペーストの解決策にアクセスできないためです…

解決策 7

Java と JavaScript は実際には 2 つの異なるプログラミング言語であるため、一方を他方に直接変換することはできません。 ただし、Java の多くの概念と構文は JavaScript の概念と類似しているため、多くの場合、Java コードを JavaScript に多少の努力で変換できます。

提供したコードを JavaScript に変換するには、次の変更を加える必要があります。

JavaScript には他のコード ファイルをインポートするという概念がないため、ファイルの先頭にある import ステートメントを削除します。

public クラス宣言を JavaScript 関数宣言に変更します。 たとえば、パブリック クラス EvaluateDivisors は次のように変更できます。

function EvaluateDivisors() {
    // class body goes here
}

main メソッドを、コードの実行時に呼び出される JavaScript 関数に置き換えます。 たとえば、public static void main(String[] args) は次のように変更できます。

function run(args) {
    // main method body goes here
}

Java データ型 (int、long など) を同等の JavaScript データ型 (Number、String など) に置き換えます。 たとえば、int 結果 = 0; let result = 0; に変更できます。

Java メソッド呼び出し (Long.parseLong など) を同等の JavaScript メソッド呼び出し (parseInt など) に置き換えます。 たとえば、 long a = Long.parseLong(args[0]); let a = parseInt(args[0]);.

残りの Java 構文を JavaScript 構文に変換します。 たとえば、for (int i = 0; i < 10; i++) は for (let i = 0; i < 10; i++) に変更できます。 これらの変更後のコードの例を次に示します。

function EvaluateDivisors() {

    function run(args) {
        try {
            let a = parseInt(args[0]);
            let b = parseInt(args[1]);
            let k = 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");
            }
            console.log(solution(a, b, k));
        } catch (e) {
            if (e instanceof IndexOutOfBoundsException) {
                error("Usage: EvaluateDivisors A B K");
            } else if (e instanceof NumberFormatException) {
                error("Error: arguments must be integers");
            }
        }
    }

    function solution(a, b, k) {
        if (prime(k)) {
            return primeSolution(a, b, k);
        }
        let result = 0;
        for (let n = Math.sqrt(a); n*n <= b; n++) {
            let divisors = 3;
            for (let m = 2; m < n && divisors <= k; m++) {
                if (n*n % m == 0) {
                    divisors += 2;
                }
            }
            if (divisors == k) {
                result++;
<pre>        }
        return result;
    }

    function primeSolution(a, b, k) {
        let result = 0;
        let 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 (let m = 2; m <= Math.sqrt(n); m++) {
            if (n % m == 0) {
                return false;
            }
        }
        return true;
    }

    function error(message) {
        console.error(message);
        process.exit(1);
    }
}

このコードは、変換されたコードがどのように見えるかの例にすぎないため、正しいとは限りません。 コードが期待どおりに動作することを確認するために、コードをテストおよびデバッグすることを常にお勧めします。

コメント

タイトルとURLをコピーしました