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

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

ただいまの
回答率

87.93%

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

解決済

回答 5

投稿

  • 評価
  • クリップ 1
  • VIEW 11K+

score 78

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("部長がだるどうに立ちました。");
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/11 17:38

    回答ありがとうございます。

    Shachoクラスのクラス名をMainに、あと、Main.javaに書き換えてみたのですが、エラーが出ました。

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at Main.main(Main.java:10)

    キャンセル

  • 2016/08/11 17:42 編集

    ご提示のエラーメッセージは

     Main.java の10行目で ArrayIndexOutOfBoundsException という例外が発生した

    という意味です。
    該当部分のコードを確認してみてください。

    ArrayIndexOutOfBoundsException の意味は、以下を参照してください。
    https://docs.oracle.com/javase/jp/8/docs/api/java/lang/ArrayIndexOutOfBoundsException.html

    どうしても分からなければ、現状の Main.java のコードを質問欄に追記してください。
    (その際、どこが10行目か分かるようにしていただけると助かります)

    キャンセル

  • 2016/08/12 08:46

    回答ありがとうございます。

    10行目ですね。調べてみます。

    ありがとうございました。

    キャンセル

checkベストアンサー

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 17:37

    回答ありがとうございます。

    ファイルをMain.javaに変えて、public class Mainに書き換えてやってみたのですが、それもエラーが出ました。

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at Main.main(Main.java:10)

    キャンセル

  • 2016/08/11 18:42

    Mainクラスの読み込みまではクリアしてますね。

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

    キャンセル

  • 2016/08/11 18:46

    ちなみに元のShachoクラスって残ってますか?

    手っ取り早くやると、
    MainクラスのmainメソッドからShachoクラスをインスタンス化して、動作させたいメソッドを呼び出すのが楽かと思いました。

    Shachoクラス内のmainメソッドをリネームしたりする必要があるかもしれませんが。

    キャンセル

  • 2016/08/12 08:45

    回答ありがとうございます。

    Shachoクラスをインスタンス化すればいいんですね。

    やってみます。

    ありがとうございました。

    キャンセル

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/11 17:42

    回答ありがとうございます。

    Paiza.IOでJavaを選択して、「実行」という緑のボタンを押してみました。

    実行環境がよくわかりませんが、Windows10でIEを使っています。

    キャンセル

  • 2016/08/11 17:46

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

    キャンセル

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 19:32

    swordone様

    そこはコマンドライン引数ではなく、標準入力を入力する欄のようです。

    https://paiza.io/help
    > 4. エディタエリア下部のinputエリアに入力された値は、実行時にmainプログラムに標準入力として与えられます。

    キャンセル

  • 2016/08/11 19:33

    失礼しました、すでに回答を修正済みでしたね。

    キャンセル

  • 2016/08/12 08:44

    回答ありがとうございます。

    Paiza.IOでは、コマンドライン引数というのが使えないのですね。

    となると、Paiza.IOではなく、JDKとかを使わないとダメってことですよね。

    わかりました。ありがとうございました。

    キャンセル

-3

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

以上

追記

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/11 16:14

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

    キャンセル

  • 2016/08/11 16:18

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

    キャンセル

  • 2016/08/11 17:40

    回答ありがとうございます。

    起動クラスが決まっていたのですね。

    となると、プログラムを書き換えるしかないですかね。

    どうやったらいいのかわかりませんが…。

    キャンセル

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

  • ただいまの回答率 87.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る