package ex01; import App.java.util.function.Supplier; //再帰呼び出しクラス public class RecursiveCallApp { int level = 0; //再帰レベル //再帰呼び出し過程を追跡出力するメソッド <T> T trace(String fname, String[] args, Supplier<T> fun) { String s = new String(new char[level]).replace("¥0", "- ") + level + ": " + fname; System.out.println(s + " (" + String.join(",", args) + ")"); level++; T ret = fun.get(); level--; System.out.println(s + " =" + ret); return ret; } int fact(int x) { return trace("fact", new String[] { ""+x }, ( ) -> { if (x == 1) return 1; else return x * fact(x-1); }); } public static void main(String[] args) { RecursiveCallApp = new RecursiveCallApp(); System.out.println("階乗=" + App.fact(5)); } }
以下のエラーが起きます:
- java: パッケージApp.java.util.functionは存在しません
- java: シンボルを見つけられません
シンボル: クラス Supplier
場所: クラス ex01.RecursiveCallApp
3.java: 不適合な型: <any>は機能インタフェースではありません
4.java: シンボルを見つけられません
シンボル: 変数 RecursiveCallApp
場所: クラス ex01.RecursiveCallApp
5.java: シンボルを見つけられません
シンボル: 変数 App
場所: クラス ex01.RecursiveCallApp
Intellijを使用してますが、うまくコンパイルできません。誰かわかる方いましたら教えて下さい。
ソースコードはMarkDownのcode機能で提示してください。
ソースコード全体を選択して、<code>ボタンを押してください。
言語の基礎知識が足りていないと思います。
teratailで質問する前に、家庭教師などを雇って基礎からきっちり勉強した方が良いでしょう。
再帰スタックは正しく積みあがって階乗は計算するけれどトレースが出ないのはなぜか。<-- Fedora 23 JavaSe-11 (libericaJdk-full 11.0.6)で、英語キーボードだと"¥0"がエスケープとみなされない問題でした。
Windows 10 Java-Se-11 (LibericaJDK-11-Full)では正常に動作しました。
