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

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

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

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Java

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

Q&A

解決済

1回答

1246閲覧

DcoderというPG環境スマホアプリでのPGエラー

st-access_91s

総合スコア43

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Java

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

0グッド

0クリップ

投稿2019/03/30 03:20

※PG作業のブランクがあるため、基本的な知識不足やコードミスがあるかもしれません。予めご理解いただけると幸いです。また、情報不足でしたら、随時追加致します。

家でまとまった時間を作って環境構築→PG練習というのが難しいため、DcoderというスマホアプリでPG練習をしている(Javaとscala)のですが、クラスファイルを複数作ろうとすると、以下のようなエラーが起きます。

source_file.java:3: error: class Main is public, should be declared in a file named Main.java
public class Main {
^
1 error

ちなみにこのエラーが起きているのは、以下のMain.javaクラスファイルでコンパイルした時です。

package Main.java;

public class Main {
public static void main(String[] args) {
System.out.println();
}
}

以前、似たような質問をされている方がいて、その回答も見たのですが最終的な解決方法が分からず、自分でもトピック立てました。
ちなみにDcoderアプリにはデフォルトとして、以下のようなDcoderファイルがあります(他言語でも同様)。

import java.util.*;

/Please don't change class name, Dcoder
and class must not be public
/

//Compiler version JDK 1.8

class Dcoder {
public static void main(String[] args) {
System.out.println("Hello, Dcoder!");
}
}

このファイル内でなら、フィールドやメソッド立ててPG練習することは出来るのですが、別のクラスファイルを立てての練習が出来ない状況です。
どなたか解決方法お分かりになりますか?

ちなみにscalaだと、以下のような状況です。

【Dcoderファイル】
//scala 2.12.3
//'Dcoder' object is the entry point
//for your code.
//Don't declare a package.

object Dcoder extends App {
println("Hello, Dcoder")
}

【条件検索用のResearchクラスファイル】
//条件検索
object Dcoder
class Research(s:Int){
var str:String = "first"
var b:Boolean = false
val n:Int = 222
val d:Double = 0.01
if (s==1){
println(1)
} else {
println(2)
}
}

Researchクラスファイルでコンパイルすると、以下のようなエラーが起きます。こちらの解決方法についてもお分かりになる方から助言いただけると幸いです。

java.lang.NoSuchMethodException: Dcoder.main([Ljava.lang.String;)
at java.lang.Class.getMethod(Class.java:1786)
at scala.reflect.internal.util.ScalaClassLoader.run(ScalaClassLoader.scala:94)
at scala.reflect.internal.util.ScalaClassLoader.run$(ScalaClassLoader.scala:90)
at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:129)
at scala.tools.nsc.CommonRunner.run(ObjectRunner.scala:22)
at scala.tools.nsc.CommonRunner.run$(ObjectRunner.scala:21)
at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:39)
at scala.tools.nsc.CommonRunner.runAndCatch(ObjectRunner.scala:29)
at scala.tools.nsc.CommonRunner.runAndCatch$(ObjectRunner.scala:28)
at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:39)
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:66)
at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:85)
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:96)
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:101)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

なお、Dcoderの公式サイトは以下の通りです。
https://dcoder.tech

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

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

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

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

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

guest

回答1

0

ベストアンサー

source_file.java:3: error: class Main is public, should be declared in a file named Main.java public class Main { ^ 1 error

ちなみにこのエラーが起きているのは、以下のMain.javaクラスファイルでコンパイルした時です。

エラーメッセージの内容から
Main.java ファイルでコンパイルした時と書かれていますが、エラーメッセージの内容はファイル名が source_file.java であることを示しています。Javaのファイル名はクラスメイト同じである必要があります。

【追記】
Dcoderのサイト見てみました。コメントに「クラス名Dcoderは変更してはいけない」、「クラスpublicにしてはいけない」と書かれています。
ソースコードは1ファイルのみで、プログラミング言語をちょっと試してみるだけのもののようです。
複数クラスを使用したコードの記述を試す場合は以下のようになると思います。

java

1import java.util.*; 2 3/*Please dont change class name, Dcoder 4and class must not be public*/ 5 6//Compiler version JDK 1.8 7 8class Dcoder 9{ 10 public static void main(String args[]) 11 { 12 Main main = new Main(); 13 System.out.println(main.hello()); 14 } 15} 16 17class Main 18{ 19 public String hello() { 20 return "Hello, Dcoder!"; 21 } 22}

scalaについても同じように、1ファイル構成で「Dcoderオブジェクトはプログラムの入り口」になっています。extends AppなしのDcoderオブジェクトを記述しているので、mainメソッドが見つからないエラーが発生します。
別クラスを呼び出す処理は以下のような記述になります。

scala

1//Scala 2.12.1 2//'Dcoder' object is the entry point 3//for your code. 4//Don't declare a package. 5 6object Dcoder extends App { 7 println("Hello, Dcoder!") 8 new Research(1) 9} 10 11//条件検索 12class Research(s:Int){ 13 var str:String = "first" 14 var b:Boolean = false 15 val n:Int = 222 16 val d:Double = 0.01 17 if (s==1){ 18 println(1) 19 } else { 20 println(2) 21 } 22}

投稿2019/03/30 06:55

編集2019/03/30 07:31
tkmtmkt

総合スコア1800

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

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

st-access_91s

2019/03/30 12:57

あ…もしかしてとは思ってましたが複数クラスファイルでのPGが出来ないアプリでしたか…。 ありがとうございます。一つのファイルの中で複数クラス用意して、できる限りの練習積みます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問