質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
人工知能

人工知能とは、言語の理解や推論、問題解決などの知的行動を人間に代わってコンピューターに行わせる技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

1171閲覧

Javaの再帰関数のトレースプログラム

kota_bus

総合スコア4

人工知能

人工知能とは、言語の理解や推論、問題解決などの知的行動を人間に代わってコンピューターに行わせる技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/06/30 07:25

編集2021/06/30 08:17
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)); } }

以下のエラーが起きます:

  1. java: パッケージApp.java.util.functionは存在しません
  2. java: シンボルを見つけられません

シンボル: クラス Supplier
場所: クラス ex01.RecursiveCallApp
3.java: 不適合な型: <any>は機能インタフェースではありません
4.java: シンボルを見つけられません
シンボル: 変数 RecursiveCallApp
場所: クラス ex01.RecursiveCallApp
5.java: シンボルを見つけられません
シンボル: 変数 App
場所: クラス ex01.RecursiveCallApp

Intellijを使用してますが、うまくコンパイルできません。誰かわかる方いましたら教えて下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K_3578

2021/06/30 07:26

ソースコードはMarkDownのcode機能で提示してください。 ソースコード全体を選択して、<code>ボタンを押してください。
javahack

2021/06/30 08:26

言語の基礎知識が足りていないと思います。 teratailで質問する前に、家庭教師などを雇って基礎からきっちり勉強した方が良いでしょう。
xebme

2021/07/01 11:26 編集

再帰スタックは正しく積みあがって階乗は計算するけれどトレースが出ないのはなぜか。<-- Fedora 23 JavaSe-11 (libericaJdk-full 11.0.6)で、英語キーボードだと"¥0"がエスケープとみなされない問題でした。 Windows 10 Java-Se-11 (LibericaJDK-11-Full)では正常に動作しました。
guest

回答1

0

とりあえずツッコむ所を。

java: パッケージApp.java.util.functionは存在しません

import App.java.util.function.Supplier;になってるから、App.java.util.functionパッケージ
のSupplierクラスをインポートしようとしてるのが原因。何故こうなったのか分からんが、

import java.util.function.Supplier;にすればよい。

java: シンボルを見つけられません

シンボル: クラス Supplier
場所: クラス ex01.RecursiveCallApp

上と原因は一緒。java.util.functionパッケージにSupplierクラスはあるけど、
App.java.util.functionパッケージにはないのでそんなクラスは見つからないと言っている。

java: 不適合な型: <any>は機能インタフェースではありません

そもそも提示コード上にそんなものがないので再現出来ない。

java: シンボルを見つけられません

シンボル: 変数 RecursiveCallApp
場所: クラス ex01.RecursiveCallApp

恐らくインスタンスを生成したいんだと思うので、こう書き換える
RecursiveCallApp recursiveCallApp = new RecursiveCallApp();
RecursiveCallApp App = new RecursiveCallApp();

java: シンボルを見つけられません

シンボル: 変数 App
場所: クラス ex01.RecursiveCallApp

Appパッケージなんかあったか?
覚えてないけどとりあえず何かしらインポートしてないせい。

一つ上の行でAppが未定義なので出ているエラー。
上記したようにRecursiveCallApp App = new RecursiveCallApp();
とすればよい。

※コメントでのjavahackさんの補足を頂き、回答修正しました。

投稿2021/06/30 08:46

編集2021/07/01 05:50
K_3578

総合スコア1282

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

javahack

2021/06/30 08:56

最後のは System.out.println("階乗=" + App.fact(5)); のAppが未定義だからではないでしょうか。 1つ前の行の RecursiveCallApp = new RecursiveCallApp(); を RecursiveCallApp App = new RecursiveCallApp(); にすれば良さげ。
K_3578

2021/07/01 05:45

>javahackさん 補足ありがとうございます。 回答、修正させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問