hayatedonda
@hayatedonda

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

起動パラメータ

public static void main(String[] args) {
if (args.length != 1) {
throw new IllegalArgumentException();
}
int value = Integer.parseInt(args[0]);
execute(value, 8);
}

public static void execute(int value, int baseNumber) {
if (baseNumber < 2 && baseNumber > 9) {
throw new IllegalArgumentException();
}

if (value == baseNumber) {
    System.out.print(value / baseNumber);
    System.out.print(value % baseNumber);
} else if (value > baseNumber) {
    execute(value / baseNumber, baseNumber);
    System.out.print(value % baseNumber);
} else {
    System.out.print(value);
}

}

これの実行結果ってどうなりますか?
僕はバグになってしまうのですが、
回答だと、

答えは起動パラメータで指定された数値を8進数で表示する
です。

解説)
皆さんバグに惑わされていませんか?


​if (baseNumber < 2 && baseNumber > 9) {
throw new IllegalArgumentException();
}

この部分はバグですが、条件には該当する事はないためIllegalArgumentExceptionは発生しません。
第二引数が1以下、10以上の時に正しく動作しませんが、
mainメソッドで第二引数に「8」を渡しているため正常に動作します。

「execute(value, 8);」の部分で何進数で表示させるか指定しています。
2進数から9進数までの表示が可能ですので、数値を変えて実行してみてください。

「execute(value / baseNumber, baseNumber);」この部分は再起処理を使用し、
メソッドの中から同じメソッドを呼び出しています。

とのことです。
本当に合っていますか?

0

1Answer

実行の際にコマンドラインで引数(起動パラメータ)を渡していないのではないでしょうか。

例えば、以下のようにすると、正しく200が得られます。

public class Main {

    public static void main(String[] args) {
        args = new String [] { "128" }; // コマンドライン引数の代用
        if (args.length != 1) {
            throw new IllegalArgumentException();
        }
        int value = Integer.parseInt(args[0]);
        execute(value, 8);
    }
    
    public static void execute(int value, int baseNumber) {
        if (baseNumber < 2 && baseNumber > 9) {
            throw new IllegalArgumentException();
        }
        if (value == baseNumber) {
            System.out.print(value / baseNumber);
            System.out.print(value % baseNumber);
        } else if (value > baseNumber) {
            execute(value / baseNumber, baseNumber);
            System.out.print(value % baseNumber);
        } else {
            System.out.print(value);
        }
    }

}

あと、質問にソースコードを書かれる際には、「コードの挿入 (リンク)」の書式に倣うと、読みやすくなると思います。

1Like

Comments

  1. @hayatedonda

    Questioner

    ありがとうございます!

Your answer might help someone💌