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

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

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

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

Q&A

解決済

5回答

19192閲覧

オブジェクト指向を勉強しているのですが、エラーがでます。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

1クリップ

投稿2016/08/11 06:55

Paiza.IOを使って、オブジェクト指向を勉強しているのですが、本に書いてあるプログラムを入力しても、エラーが出るのですが、どうしたら良いでしょうか?

ポリモーフィズムを勉強しています。

エラーは、実行時エラー
「Error: Could not find or load main class Main」と出てきます。

Mainクラスがないとエラーが出ているように思うのですが、Paiza.IOでは、本の通りに入力しても、実行できないのでしょうか?どうしたら良いのでしょうか?

詳しい方いらっしゃいましたら、教えてください。

よろしくお願い致します。

Shacho.java

public class Shacho { public static void main(String[] args) throws Exception { Shain shain = null; if (args[0].equals("Tanto")){ shain = new Tanto(); } if(args[0].equals("Shunin")){ shain = new Shunin(); } if(args[0].equals("Bucho")){ shain = new Bucho(); } shain.standup(); } }

Shain.java

public interface Shain{ public void standup(); }

Tanto.java

public class Tanto implements Shain{ public void standup(){ System.out.println("担当が普通に起立しました。"); } }

Shunin.java

public class Shunin implements Shain{ public void standup(){ System.out.println("主任がすばやく立ちました。"); } }

Bucho.java

public class Bucho implements Shain{ public void standup(){ System.out.println("部長がだるどうに立ちました。"); } }

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

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

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

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

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

guest

回答5

0

どうやら Paiza.IO では、Mainという名前のクラスにメインメソッド (public static void main(String[] args))
を定義しなければならないようです。

Shachoクラスのクラス名をMainに変更して、再度 実行してみてください。

投稿2016/08/11 07:19

KiyoshiMotoki

総合スコア4791

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

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

退会済みユーザー

退会済みユーザー

2016/08/11 08:38

回答ありがとうございます。 Shachoクラスのクラス名をMainに、あと、Main.javaに書き換えてみたのですが、エラーが出ました。 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Main.main(Main.java:10)
KiyoshiMotoki

2016/08/11 08:49 編集

ご提示のエラーメッセージは  Main.java の10行目で ArrayIndexOutOfBoundsException という例外が発生した という意味です。 該当部分のコードを確認してみてください。 ArrayIndexOutOfBoundsException の意味は、以下を参照してください。 https://docs.oracle.com/javase/jp/8/docs/api/java/lang/ArrayIndexOutOfBoundsException.html どうしても分からなければ、現状の Main.java のコードを質問欄に追記してください。 (その際、どこが10行目か分かるようにしていただけると助かります)
退会済みユーザー

退会済みユーザー

2016/08/11 23:46

回答ありがとうございます。 10行目ですね。調べてみます。 ありがとうございました。
guest

0

英:Error: Could not find or load main class Main
日:Error: Main.class の読み込みに失敗したか Main.class に main メソッドがありません。

以上

追記

任意のクラス名で実行したいのならば JDK をインストールしてください。
Web上で実行できるものは起動クラスが決まっています。

最初に表示されたクラスを削除したのが原因です。

投稿2016/08/11 07:07

編集2016/08/11 07:17
asahina_dev

総合スコア610

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

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

Orlofsky

2016/08/11 07:14

翻訳しただけで、質問者への解答になっていない。
asahina_dev

2016/08/11 07:18

そもそも 「Mainクラスがないとエラーが出ているように思うのですが、」 という質問の解答ではあるのだが
退会済みユーザー

退会済みユーザー

2016/08/11 08:40

回答ありがとうございます。 起動クラスが決まっていたのですね。 となると、プログラムを書き換えるしかないですかね。 どうやったらいいのかわかりませんが…。
guest

0

クラス名を直したあとのプログラムでArrayIndexOutOfBoundsExceptionが出たのは、このコマンドライン引数が入っていない、すなわちargsが長さ0の配列になっている所に、argsの0番という存在しないものを参照したことによるものです。

mainメソッドの引数String[] argsコマンドライン引数と呼ばれるものです。
自分のPCでJavaプログラムを実行する際、Windowsならコマンドプロンプトに"java (クラス名)"を打ち込んで実行するわけですが、この(クラス名)のあとに文字を打ち込むと、それが半角スペース区切りでStringの配列となり、mainメソッドに渡されます。

しかしこの環境ではコマンドライン引数を受け取って実行する仕組みにはなっていないようです。その代わり
paiza.io画面
この画面下、丸で囲った部分に文字を入力するためのスペースが存在します。これは標準入力で、System.inから文字列などを取ることができます。ちょうど画像に出ているようなnew BufferedReader(new InputStreamReader(System.in));のようにして取得する準備ができます。argsを使う代わりにこれを使うべきではないでしょうか。

投稿2016/08/11 10:20

編集2016/08/11 10:25
swordone

総合スコア20651

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

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

KiyoshiMotoki

2016/08/11 10:32

swordone様 そこはコマンドライン引数ではなく、標準入力を入力する欄のようです。 https://paiza.io/help > 4. エディタエリア下部のinputエリアに入力された値は、実行時にmainプログラムに標準入力として与えられます。
KiyoshiMotoki

2016/08/11 10:33

失礼しました、すでに回答を修正済みでしたね。
退会済みユーザー

退会済みユーザー

2016/08/11 23:44

回答ありがとうございます。 Paiza.IOでは、コマンドライン引数というのが使えないのですね。 となると、Paiza.IOではなく、JDKとかを使わないとダメってことですよね。 わかりました。ありがとうございました。
guest

0

ベストアンサー

完全にEclipseかと思い込んでましたorz

少し調べた感じではどうも起動時にMain.Javaが必須くさいですね・・・
もう少し調べてみます。

###追記1
どうもMainクラスが必須というよりは、

  • Main.javaファイルが必須
  • Main.javaファイル内にmainメソッドが必須

のような気がします(見当違いでしたらごめんなさい)。
試しにShachoクラスソースはそのままに、
ファイル名を「Main.java」としてはどうでしょう?

上記もだめなら素直にMainクラス作るしかないですね・・・

###追記2
コメント書いてて気付きましたが、
多分args[0]の箇所で落ちてるのでは?

ifの前に以下のやり方を加えてみたらどうでしょう?
args = new String[]{"Tanto"};

推測ですが、
恐らくmainメソッドの引数argsに値が引き渡されてないだけかと。

投稿2016/08/11 07:21

編集2016/08/11 10:04
Panzer_vor

総合スコア1636

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

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

退会済みユーザー

退会済みユーザー

2016/08/11 08:37

回答ありがとうございます。 ファイルをMain.javaに変えて、public class Mainに書き換えてやってみたのですが、それもエラーが出ました。 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Main.main(Main.java:10)
Panzer_vor

2016/08/11 09:42

Mainクラスの読み込みまではクリアしてますね。 後は内部ロジック中に何らかの不備があるはずなので、 アドバイスをいただきたい場合はMain.javaのソースコードを掲載してくれたら良いかと。
Panzer_vor

2016/08/11 09:46

ちなみに元のShachoクラスって残ってますか? 手っ取り早くやると、 MainクラスのmainメソッドからShachoクラスをインスタンス化して、動作させたいメソッドを呼び出すのが楽かと思いました。 Shachoクラス内のmainメソッドをリネームしたりする必要があるかもしれませんが。
退会済みユーザー

退会済みユーザー

2016/08/11 23:45

回答ありがとうございます。 Shachoクラスをインスタンス化すればいいんですね。 やってみます。 ありがとうございました。
guest

0

起動の仕方とか、実行環境に問題がある可能性があります。そちらについても情報があるといいと思います。

投稿2016/08/11 07:02

HogeAnimalLover

総合スコア4830

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

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

退会済みユーザー

退会済みユーザー

2016/08/11 08:42

回答ありがとうございます。 Paiza.IOでJavaを選択して、「実行」という緑のボタンを押してみました。 実行環境がよくわかりませんが、Windows10でIEを使っています。
HogeAnimalLover

2016/08/11 08:46

他の回答を見る限り、実行環境の問題は解決したようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問