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

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

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

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

Q&A

解決済

2回答

1467閲覧

java

kisaragizinzin7

総合スコア90

Java

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

0グッド

0クリップ

投稿2015/10/02 01:34

アプレットとアプリケーション?の違いについてお聞きしたいです。

私の解釈が間違っているかもしれませんが、
アプリケーションの場合mainメソッドがあり

public class Main{
public static void main(String[] args) {

int playernum = 3; Player player[] = new Player[playernum]; for(int i = 0; i < playernum; i++){ player[i] = new Player("プレイヤー"+(i+1)); }




}
}

とできるのですが、
アプレットの場合は

public class App extends Applet{

int playernum = 3; Player player[] = new Player[playernum]; for(int i = 0; i < playernum; i++){ player[i] = new Player("プレイヤー"+(i+1));

上記のようにするとfor文からエラーが出てしまいます。

public class App extends Applet{
int playernum = 3;
Player player[] = new Player[playernum];

public void init(){
for(int i = 0; i < playernum; i++){
player[i] = new Player("プレイヤー"+(i+1));
}
}
}

上記のようにinitメソッドの中に書くとエラーは出ないのですが、

public class App extends Applet{
int playernum = 3;
Player player[] = new Player[playernum];

public void init(){
for(int i = 0; i < playernum; i++){
player[i] = new Player("プレイヤー"+(i+1));
}
}
public void paint(Graphics g){
for(int i = 0; i < playernum; i++){
g.drawString(player[i].getName(), 100+(i*50), 100);
}

}

上記のようにpaintメソッドに書いて
プレイヤー1 プレイヤー2 プレイヤー3
と表示させたいときに、このプログラムではplayer[i] = new Player("プレイヤー"+(i+1)); が別のメソッド(initメソッド)にあるせいか表示できません。

どのようにすれば、プレイヤー1 プレイヤー2 プレイヤー3を表示させることができるのでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

一番最後に記載されているコード自体は問題ないようです。

Playerクラスの方に問題があるのではないでしょうか。

投稿2015/10/02 03:27

argius

総合スコア9388

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

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

kisaragizinzin7

2015/10/02 04:29

回答ありがとうございます^^ public class Player { private String name; //プレイヤーの名前 //----------------------------------------------------------------------------------- //手を出すメソッド int hand; //出す手 static final int gu = 0, tyoki = 1, pa = 2; //0ならグー、1ならチョキ、2ならパー public int Player_HUM_hand(){ //プレイヤーの場合 int fix = Input.getInt("何を出しますか? 0グー、1チョキ、2パー"); if(fix == 0){ //0ならグー hand = gu; } else if(fix == 1){ //1ならチョキ hand = tyoki; } else{ //2(その他)ならパー hand = pa; } System.out.print(ha_nd+"\t"+"\n"); return hand; } public int Player_NPC_hand(){ //NPCの場合 Random rnd = new Random(); int run = rnd.nextInt(3); if(run == 0){ //0ならグー hand = gu; } else if(run == 1){ //1ならチョキ hand = tyoki; } else{ //2(その他)ならパー hand = pa; } System.out.print(ha_nd+"\t"+"\n"); return hand; } //------------------------------------------------------------------------------------ public Player(String name){ this.name = name; } //---------------------------------------------------------------------------------------- public String getName(){ return name; } Playerクラスはこんな感じなのですが問題ありますでしょうか?
argius

2015/10/02 06:14

ha_ndというキーワードに誤りがあります。 Playerは正常にコンパイルされていますか? 念のため、このコードをどのようにコンパイル・実行しているかも教えていただけると詳しく回答できるかも知れません。
kisaragizinzin7

2015/10/06 08:47

すみません>< ちゃんと表示できました。 回答ありがとうございました!
guest

0

アプレットの場合も、アプリケーションの場合も、
クラスの定義は変わらないです。

public class App extends Applet{

int playernum = 3; Player player[] = new Player[playernum]; for(int i = 0; i < playernum; i++){ player[i] = new Player("プレイヤー"+(i+1));

上記のようにするとfor文からエラーが出てしまいます。

この場合、
int playernumPlayer player[]はフィールドとして定義していることになります。
しかし、for文はメソッド内で使用するものなのに、
メソッド宣言もないので、コンパイラが解釈できないのです。

上記のようにpaintメソッドに書いて
プレイヤー1 プレイヤー2 プレイヤー3
と表示させたいときに、このプログラムではplayer[i] = new Player("プレイヤー"+(i+1)); が別のメソッド(initメソッド)にあるせいか表示できません。

init()player[i] = new Player("プレイヤー"+(i+1));しているのは特に問題ないと思います。
これは、g.drawString(player[i].getName(), 100+(i*50), 100); で指定している
座標が大きすぎて画面に表示しきれていないのではないでしょうか?

投稿2015/10/02 01:55

kaputaros

総合スコア1844

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

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

kisaragizinzin7

2015/10/02 02:06

回答ありがとうございます^^ 私もその可能性があると思ったので g.drawString(player[i].getName(), 100+(i*50), 100); を下のようにただの文字列になおすと表示できました。 g.drawString("player[i].getName()", 100+(i*50), 100); ですので他に原因があるみたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問