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

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

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

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

Q&A

解決済

2回答

1206閲覧

Javaエラーの理由が見つけられません。

talabagani

総合スコア50

Java

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

0グッド

1クリップ

投稿2021/06/23 07:29

編集2021/06/24 22:17

#[環境]
Java version 16.0.1
VS Code
Mac OS Big Surの環境です。
java -version
java version "16.0.1" 2021-04-20
Java(TM) SE Runtime Environment (build 16.0.1+9-24)
Java HotSpot(TM) 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)
Tomis-MacBook:09_MinutesToYearsandDayCalculator tomifukumoto$

#[エラー]
Main.java:4: エラー: シンボルを見つけられません
MinuesToYearsandDayCalculator.printYearsAndDays(525600);
^
シンボル: 変数 MinuesToYearsandDayCalculator
場所: クラス Main
エラー1個
#[エラー javac MinutesToYearsandDaysCalculator.java と打った時]
MacBook:09_MinutesToYearsandDayCalculator $ ls
Main.java MinutesToYearsandDaysCalculator.java

MacBook:09_MinutesToYearsandDayCalculator $ javac MinutesToYearsandDaysCalculator.java

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

#[学習状況]
progateを3巡、ドットインストール1巡、スッキリJavaの本を8割読みました。
現在、UdemyのJava Programming Masterclass for Software Developersというコースで演習問題に取り組んでいます。Java学習を初めて一ヶ月目が過ぎたところです。
ドットインストール、Udemyの演習はVScodeに書いてそのターミナルにコマンドを書いています。
この問題はUdemyでの演習9番目なので、まったくの初めてというわけではありません。
まだまだ初心者ですが真面目に取り組んでいるので、何卒、よろしくお願いします。

#[やりたいこと]
525600分(時間)みたいな分(時間)を ◯年◯日間に分解して書くコードを書こうとしています。

#[コード]
##ファイルは二つあります。それぞれにクラスが一つづつあります。

###ファルの名前 MinuesToYearsandDayCalculator.java

java

1public class MinuesToYearsandDayCalculator{ 2 public static void printYearsAndDays(long minutes){ 3 if(minutes<0){ 4 System.out.println("Invalis Value"); 5 } else { 6 long YY= minutes/(365*24*60); 7 long a = minutes%(365*24*60); 8 long ZZ = a/(24*60); 9 10 System.out.println(minutes+" min = "+ YY + " y and "+ ZZ +"d"); 11 12 } 13 } 14}

java

1###ファイルの名前 Main.java 2public class Main { 3 public static void main(String[] args) { 4 5 MinuesToYearsandDayCalculator.printYearsAndDays(525600); 6 7 8 } 9 10}

#ネット上にある模範回答例(main class はありません。)

java

1public class MinutesToYearsDaysCalculator { 2 3 public static void printYearsAndDays(long minutes){ 4 if (minutes < 0){ 5 System.out.println("Invalid Value"); 6 }else{ 7 long years = minutes / 525600; 8 long days = (minutes % 525600) / 1440 ; 9 10 11 System.out.println(minutes + " min = " + years + " y and " + days + " d"); 12 } 13 } 14}

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

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

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

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

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

m.ts10806

2021/06/23 07:31

コードはマークダウンのcodeにてご提示ください。 あと、それぞれのクラスのパッケージ構成も記載してください。
maisumakun

2021/06/23 07:33

> エラー: シンボルを見つけられません さらに詳細なエラーメッセージは出ていないのですか?
K_3578

2021/06/23 07:35 編集

>クラス名もメソッド名もコピぺなので何がいけないのかよくわかりません。 分からないのはこれが理由。コピペしたところで中身を理解しなければ 何の知識も身につかない。 それはともかくとして、エラーメッセージは省略せずにそのままコピペで載せてください。 ソースコードはMarkDownのcode機能でコードブロックで囲んで提示してください。
BeatStar

2021/06/23 07:34

環境(OSのバージョンや、IDEまたはコンパイラ名)や、『どのように起動したか』ぐらいは書きましょう。 場合によってはコード上の問題ではなく、環境の問題の可能性もあります。
BeatStar

2021/06/23 07:36

また他の方も仰っているように、『コピペはやめましょう』。 コピペはプログラミングではないです。
dodox86

2021/06/23 08:01

コピペ自体は理解して使わせてもらう分にはまだ良いと思うのですが、「コピペなので何がいけないか分からない」とまで書かれてしまうとどう回答してもそれも理解されないのでは、と言う感じです。
K_3578

2021/06/23 08:07

Javaの基礎から勉強できるものなんてインターネット上に山ほどあるのでまず一回初めっから勉強し直した方が早いと思います。
talabagani

2021/06/23 18:42 編集

質問の書き方、改めます。申し訳ありません。
talabagani

2021/06/23 21:26

書き方がよくわかっていなくて、ご迷惑をおかけしました。 マークダウン使って書いてみました。クラスのパッケージの書き方はこんな具合で大丈夫でしょうか?
dodox86

2021/06/23 23:38

クラスのパッケージの書き方とは? 特にpackage宣言されていない様ですが。また、どのようにコンパイルしているのか、ターミナル上で手動でコマンドを実行しているのでしょうか。詳しく示しましょう。
dodox86

2021/06/24 00:57 編集

もしかすると以下のように「ソースファイルモード」でソースファイルからいきなり実行していませんか? $ java Main.java そうではなく、いったんコンパイルして実行してみてください。 $ javac Main.java $ java Main
dodox86

2021/06/24 01:00

実行環境は「VS Code」と提示済みでしたね。これは失礼しました。
talabagani

2021/06/24 06:24

packageは使っていないです。紛らわしいことを書きました。すみません。ファイルを二つに分けてそれぞれに一つづつクラスを作っています。VS codeのターミナルにコマンドを打って実行しています。 javac Main.java と打った後、エラーがでてコンパイルできない状態です。もし、うまくコンパイルできたら java Mainと打って実行する予定です。
m.ts10806

2021/06/24 06:33

細かくて申し訳ないですが質問内容は要件のみに言及されて然るべきなので「言い訳」など、本件と直接関係しない項目は質問本文に不要と思います。 それなら、なんの動画を見て学習したとか、参考書名とか、出典を書かれたほうが良いです。
dodox86

2021/06/24 07:18 編集

うーん、何かjavaコマンドの違いですかね。こちらはOracle JavaSE11 Windows版で試しました。(それは動きましたよ) Visual Studio Codeのターミナル上で、 javac -version と実行してみてください。あと、java -versionも。で、詳細情報として念の為質問文中に追記してください で、コンパイラの違いか、MinuesToYearsandDayCalculator.java が同時にコンパイルされないのかもしれません。先にMinuesToYearsandDayCalculator.javaをコンパイルしてみてください。以下のように。 $ javac MinuesToYearsandDayCalculator.java $ javac Main.java $ java Main ※それとも既に、こうやっていますか?
dodox86

2021/06/24 07:30 編集

あと、通じているのでほとんどどうでも良いことですが > Mac OS Big Sure 正しくは"macOS Big Sur"です。
talabagani

2021/06/24 22:08 編集

ご自分のターミナルで試してくださったんですね。 本当にありがとうございます。
talabagani

2021/06/25 05:58

$ javac MinuesToYearsandDayCalculator.javaのコマンドを打ったところ、エラーメッセージからクラス名とファイル名の不一致が原因だとわかりました。直して実行したら、大丈夫でした。ありがとうございました!
BeatStar

2021/06/25 08:07

(やっぱりこのオチだったか…)
guest

回答2

0

ターミナル上でのコマンド入力とその実行を説明文中に示されてやっと分かったかんじです。原因としてはクラス名のスペルミスです。

[エラー javac MinutesToYearsandDaysCalculator.java と打った時]
MacBook:09_MinutesToYearsandDayCalculator $ ls
Main.java MinutesToYearsandDaysCalculator.java

MacBook:09_MinutesToYearsandDayCalculator $ javac MinutesToYearsandDaysCalculator.java

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

  • 誤:MinuesToYearsandDayCalculator
  • 正:MinutesToYearsandDaysCalculator

コンパイルしようとしているファイルは MinutesToYearsandDaysCalculator.java ですが、そのファイル中で定義されているクラスは MinuesToYearsandDayCalculator であり、ファイル名とクラス名が違っています。ですので MinutesToYearsandDaysCalculator.java のコンパイルに失敗し、*.classファイルは作成されず、したがって Main.javaのコンパイルに失敗しています。

ちょっとクラス名が説明的に長過ぎなのではないでしょうか。それが悪いとまでは言えませんが、こういう長い名前を使うときはエディターのコピー&ペーストや検索機能を有効に使いましょう。

投稿2021/06/25 00:11

dodox86

総合スコア9256

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

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

talabagani

2021/06/25 06:00

ファイル名がクラス名と違うとpublic class だとうまくいかないんですね。勉強になりました。本当にありがとうございました。
dodox86

2021/06/25 06:25

> ファイル名がクラス名と違うとpublic class だとうまくいかないんですね。 うまくいかないと言いますか大事なJavaの仕様なのです。パッケージを指定した場合、そのパッケージ名はディレクトリの階層に沿ったものになり、Javaソースファイルが*.classにコンパイルされた後にはその".class"拡張子を除いたファイル名がクラス名として扱われ、ローカルのファイルシステムのPATH名に対応するようになります。 JavaSE 8の仕様書の該当箇所: https://docs.oracle.com/javase/specs/jls/se8/html/jls-7.html#jls-7.6 > Under this simple organization of packages, an implementation of the Java SE platform would transform a package name into a pathname by concatenating the components of the package name, placing a file name separator (directory indicator) between adjacent components. 大事なことなので常に気に留めておいてください。
talabagani

2021/06/25 23:27

パッケージを指定したことはまだ一回しかないのですが、たしかにディレクトリの階層及び名前がそのまま指定に使われていました。 なるほど、、、 ありがとうございました。
guest

0

ベストアンサー

とりあえず現在提示されてるソースコードにツッコミ入れてみます。

Java

1public class MinuesToYearsandDayCalculator { 2 public static void printYearsAndDays(long minutes) { 3 if (minutes < 0) { 4 System.out.println("Invalis Value"); 5 } else { 6 int YY = minutes / (365 * 24 * 60); //minutesはlong型だからintには変換出来ない 7 int a = minutes % (365 * 24 * 60); //minutesはlong型だからintには変換出来ない 8 int ZZ = a / (24 * 60); 9 10 System.out.println(minutes + " min = " + YY + " y and " + ZZ + "d"); 11 12 } 13 } 14}

Java

1public class Main { 2 public static void main(String[] args) { 3 4 MinuesToYearsandDayCalculator.printYearsAndDays(525600); 5 6 } 7 8}

追記(上記は質問編集前の内容)

もしかしてだけど、クラス名意図した物になってないせいなのでは。

MinuesToYearsandDayCalculator

多分お手本見る限りはMinutesToYearsandDayCalculatorだと思うから(MinutesがMinuesになってる)

投稿2021/06/23 07:43

編集2021/06/25 00:13
K_3578

総合スコア1282

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問