前提・実現したいこと
https://www.javadrive.jp/start/constructor/index2.html
のサイトでjavaを学習しています。
こちらのサンプルコードをVSCodeで読み込んだ際にエラーが発生してしまい
原因解明が出来なかったためお力を貸してくださると助かります。
発生している問題・エラーメッセージ
エディターの波線が引かれている箇所のメッセージ
The type Television is already definedJava(0)
実行した際のメッセージ
'void Television.<init>(java.lang.String)' at ctest9.main(ctest9.java:3)
該当のソースコード
ctest9.java class ctest9{ public static void main(String args[]){ Television tv1 = new Television("居間"); tv1.dispChannel(); Television tv2 = new Television("台所"); tv2.dispChannel(); } } class Television // このTelevisionに波線 { private int channelNo; private String place; Television(String newPlace){ channelNo = 1; place = newPlace; } public void setChannel(int newChannelNo){ channelNo = newChannelNo; } public void dispChannel(){ System.out.println("現在のチャンネルは" + channelNo+ "です"); System.out.println("設置してある場所は" + place + "です"); } }
試したこと
元々サンプルコードをフォルダに入れ、package フォルダ名 で管理しておりました。
それを外に出し、ファイルのみにしたのですが今回は関係なかったようです。
全て1ファイルに書かれてるのでしょうか
はい、ctest9.java というファイルに書かれています。
明記する形で修正しておきます。
意図的にインナークラスを使う実装でないのでしたら、1ファイル1クラスにしてください。
普段の実装ではそのようにするのですね。勉強になります。
今回に関しては実装に至る以前の基礎学習(引数があるコンストラクタ)時点で参考にしているサンプルコードを使用した際にエラーなってしまいました。
ご質問なのですが、今回のような実装をする際、
Televisionを別の名前に置き換えるか
もう1つファイルを作る。どちらが実務で多く使われていますか?
インナークラスとはちょっと違いましたね失礼。
Javaの規約的にはファイル名=クラス名
なので、複数クラスが交じるという実装自体、そうそうあることはないです。
調べてみるとわかりますが、Java自体の設計思想のようですね。
基礎学習の教材として適当なものかどうかはまず検討すべきところですね
Javaの思想や構造についても理解が浅く申し訳ないです...
こちらのサイトを閲覧し理解することが入社前課題なんですよね...
それだけでは不安なのでスッキリjava入門という書物でも学習している段階です。
今回の問題としては
・複数クラスを1つのファイルに入れているため やるならMainクラスとTelevisionクラスの2つのファイルを用意し紐付ける必要がある。
という結論で間違えないでしょうか...?
ふむ。課題なら全く事情を知らない他人に聞くより出題者に聞かれたほうが良いでしょうね。
課題には達成すべき目的や意図がありますから、それと離れる可能性のある赤の他人の意見は参考にできません。
なにより、あなた自身が完璧に説明しきらなければ意味がないので、そこまで付き合う義理や責任は赤の他人にはありません。
課題だと聞いた上で言えることは「エラーで調べて適切に対応してね」くらいです。
まったくもってその通りです...
出題者の方にどういった点で理解に苦しんでいるかを伝えて参ります。
ctest9クラスとTelevisionクラスの配置具合を替えてコンパイルしたらエラーが出るようになった、ということでしょうか。
(サンプルプログラムの当初のかたちでコンパイルしていたときはエラーは無かった?)
前にコンパイルしたときの*.class ファイルがCLASSPATHのどこかに残ってしまっているのではないでしょうか。
こちらなのですが、ターミナルでコンパイル、実行はできたのですがVSCodeでは出来ない。という状態でした。また、このファイル名は初めて使うためそのような事態になっていないと思われます。
CLASSPATHがなんなのか分からないのでお答え出来なく申し訳ございません。
また今回のエラーは自己解決いたしましたので解決方法を記載し、解決済みとさせていただきます。
入社前の課題の結果を全世界からアクセスできる場所に公開して良いかどうかは一考いただきたく。
直接的には実業務のものではないかもしれませんが、本質的には先日のGithubの件と似てると思います。公開や投稿の判断の是非、責任の所在。
一般の検索でもHitする全世界からアクセス可能な資料サイトのサンプルコードのサンプルコードなので良いと判断してしまいました...確かにその状況は不味かったかもしれません...
自己解決済みにしてしまったので削除依頼受理されないかもですね...
全世界からアクセス可能な場所に公開。
まあjavadrive自体は公開されていて私も学習時期にはよくお世話になったもので、これ自体には特になにも問題はないでしょうけど、今後業務に関わる際には必要な心構えにはなるかなと。脅したつもりはないので、あまり思いつめませんよう。
いえ、指摘していただいて助かりました。
念のため削除依頼は送らせていただいたので削除された場合は悪しからず
あなたの回答
tips
プレビュー