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

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

新規登録して質問してみよう
ただいま回答率
85.46%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

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

Q&A

2回答

701閲覧

エンコーディングまではできたが、クラスが認識されず、動かせない

退会済みユーザー

退会済みユーザー

総合スコア0

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

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

0グッド

1クリップ

投稿2021/07/07 14:21

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
三角形の高さと底辺を入力して計算させるといったものを作っています。
一度書き終えて、エンコーディングをして実際動かそうとすると、クラスが見当たらないといったことが起きて動かせませんどうしたらよいでしょうか。

ファイルに関してはMy java ---sankaku---Sankaku.class , sankaku.javaと
とった感じになっています

発生している問題・エラーメッセージ

^PS C:\Users\・・・\デスクトップ\My Java> javac sankaku\sankaku.java
PS C:\Users\・・・\デスクトップ\My Java> java sankaku\Sankaku
エラー: メイン・クラスSankakuを検出およびロードできませんでした
原因: java.lang.ClassNotFoundException: Sankaku

該当のソースコード

JAVA ソースコード

package sankaku;

import java.io.*;

class Sankaku {
public static void main(String[] args)throws IOException {

System.out.println("三角形の高さを入力してください");

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

String str1=br.readLine();
String str2 =br.readLine();

int a =Integer.parseInt(str1);
int b =Integer.parseInt(str2);

System.out.println("高さ:"+a+" 底辺:"+ b);

System.out.println(a*b);

}
}

試したこと

classの名前の頭が大文字になっていなかったので、大文字にしたりしてみましたが、判別されませんでした。

補足情報(FW/ツールのバージョンなど)

ツールはvscodeを使っていて、環境設定の際にJAVAの拡張のものもいれてあります。

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

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

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

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

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

Crimson_Tide

2021/07/07 15:36

誤) エンコーディング 正) コンパイル
退会済みユーザー

退会済みユーザー

2021/07/08 04:00

Crimson_TIde様 はじめたばかりで用語も怪しいので、調べてみましたが、私がやっていたことはコンパイルというらしいですね!ご指摘ありがとうございます!! m.ts10806様 ターミナルでjavacと書いてコンパイルして、java ~~~で動かさずとも、上のところから実行をおせば動かせるということでしょうか・・・
kazuma-s

2021/07/08 04:30

ソースコードの投稿に失敗しています。 「ソースコード」という文字列が四角枠に入っていますね。 その「ソースコード」に「package sankaku; ... }」を上書きしてください。 質問は編集できます。 ```Java packaget sankaku; ... } ``` と書くということです。
m.ts10806

2021/07/08 04:32

質問は編集できます。 その「ターミナル」がなんのことを指してるのか分かりませんが(VSCode使用者ではないので)、適切にjava.homeを設定してあげればツールの機能で実行までできるようですね。ビルドも実行時にやってくれるのでは
guest

回答2

0

Java Platform, Standard Editionツール・リファレンス java

引用テキストデフォルトでは、javaコマンドのオプションでない最初の引数は呼び出されるクラスの完全修飾名です

パッケージ化されたときは、クラス単体名で呼び出せなくなります。
sankakuパッケージに属するSankakuクラスというように指定する必要があります。
パッケージ名.クラス名のように.で繋ぎます。

java sankaku.Sankaku

sankakuフォルダの上位フォルダで実行する場合は上記でいいですが、
他のフォルダから実行する場合は以下のように上位フォルダまでのパスを指定する必要があります。

java -classpth "C:\Users\・・・\デスクトップ\My Java" sankaku.Sankaku

詳しくは上記リンクを見てください。

尚はまりそうなので老婆心ながら忠告しますと、
Sankakuクラスがpublicでないので、ファイル名が(←追記)頭小文字でも現時点では問題ありませんが
public class Sankaku にするとコンパイルエラーになります。

javac -encoding UTF-8 sankaku\sankaku.java

sankaku\sankaku.java:5: エラー: クラス Sankakuはpublicであり、ファイルSankaku.javaで宣言する必要があります
public class Sankaku {
^
エラー1個

sankaku.javaファイル内のpublic class のクラス名は、ファイル名と大文字小文字含め合わせる必要があります。

また識別子の命名規則上は頭小文字のクラス名でも許されますが、頭を大文字にするのが通例のようです。
※以下個人ブログリンクの為参考まで
識別子の命名規則

Java言語の命名指針

その為この場合はファイル名をSankaku.javaにするのが望ましいです。

投稿2021/07/07 15:33

編集2021/07/07 16:14
Crimson_Tide

総合スコア509

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

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

退会済みユーザー

退会済みユーザー

2021/07/08 03:57

昨日プログラミングを始めたばかりであまりよくわからずにやっているところがあるのですが、publicでクラスをつくる時には、頭文字を大文字にする必要があって、それに伴ってjavaファイルの名称も(クラスの名称).javaにする必要があるといった解釈であってますでしょうか?
Crimson_Tide

2021/07/08 04:32 編集

>また識別子の命名規則上は頭小文字のクラス名でも許されますが、 と記載したように、また「識別子の命名規則」のリンクを確認して頂ければわかりますが、 小文字でもコンパイルエラーにはなりません(場合によっては警告が出るようです)。 そういう意味では「頭文字を大文字にする必要があって」については、必ずしも必要ではありません、という回答になります。 「public でクラスを作るのであれば、javaファイルの名称も(クラスの名称).javaにする必要がある」ということであればYESです。 public classのクラス名が sankaku でファイル名も同様にsankaku.javaでも一応問題はありません。 但し、クラス名はSankakuと頭大文字が通例のようです。 例えばStringクラスやも頭大文字ですよね?それに習ったほうが自分も他人もクラスだなとわかりやすいので、今のうちから頭大文字にしたほうがいいかと思います。私は業務経験がないので想像になりますが、プロジェクトの命名指針として、クラス名の頭は大文字 と定義されるものと思われます。 老婆心ながら・・・と指摘したのは、現状ファイル名がsankaku.java でクラス名がSankakuと頭の大文字小文字が合っていないので、いざpublic class Sanakaku としたとき、回答に提示したようなエラーになり、困惑すると思ったからです。 teratailは無料でプログラミングのいろはを教えてもらえるところではないので、わからないのであればまずは体系的に学習してください。ネットで部分的にかじった知識を寄せ集めたところで、エラーが出るのは当たり前です。薄いJAVA入門的な本はとっかかりにはいいですが、端折られてる箇所も多いので、それなりに分厚くてもしっかり説明している書籍などがいいです。
guest

0

  • 作業ディレクトリはMy javaディレクトリである必要があるかと思います。
  • java sankaku.Sankaku を試してみてください。区切り文字がバックスラッシュだとうまくいきませんでした。

コードを拝借してためしてみましたが、java sankaku\Sankakuでは私の環境では表示されたエラーが異なりました。ただjava sankaku.Sankakuではうまくいきました。参考までに。
java -versionopenjdk version "11.0.5" 2019-10-15です)

log

1PS C:\Users\fukas\Documents\projects\sandbox\java-teratail-xx\demo\src\main\java> javac -encoding UTF-8 sankaku\sankaku.java 2PS C:\Users\fukas\Documents\projects\sandbox\java-teratail-xx\demo\src\main\java> java sankaku\Sankaku 3エラー: メイン・クラスsankaku\Sankakuを検出およびロードできませんでした 4原因: java.lang.NoClassDefFoundError: sankaku/Sankaku (wrong name: sankaku\Sankaku) 5PS C:\Users\fukas\Documents\projects\sandbox\java-teratail-xx\demo\src\main\java> java sankaku.Sankaku 6三角形の高さを入力してください 71 82 9高さ:1 底辺:2 102

これは正しそうに見えるので一応確認ですが、sankaku.javaの先頭のpackage名とファイルの構造は一致しているでしょうか?
具体的には package sankaku;で定義されているclass Sankakuであれば、クラスファイルはsankaku\Sankaku.classにあるべきです。何らかの理由でファイルの構造とズレているとコンパイルはできますが、クラスが見つけられなくなります。

投稿2021/07/07 15:59

fukasawah

総合スコア147

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

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

退会済みユーザー

退会済みユーザー

2021/07/08 04:19 編集

よくわからずに昨夜、 javac sankaku\sankaku.java のあとに java sankaku\sankaku.java と入力してみた結果よくわからないですが動きました。このやり方でも大丈夫なのでしょうか・・・ ファイルの位置はあっていました
Crimson_Tide

2021/07/08 04:38

それは sankakuフォルダにsankakuパッケージのjava.classがあるのでは?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問