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

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

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

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

Q&A

解決済

2回答

13423閲覧

実引数リストと仮引数リストの長さが異なります

tomagurosu

総合スコア37

Java

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

0グッド

0クリップ

投稿2017/04/25 06:59

下記のコードで引数にインスタンスを指定した箇所が全て
期待値 Hero
検出値 引数
理由 実引数リストと仮引数リストの長さが異なります
のようにエラーが出てしまいます。
どうすれば修正できますでしょうか?よろしくお願いします。

Java

1public class BattleSystem{ 2 public static void main(String[] args){ 3 Hero h = new Hero(); 4 Enemy e = new Enemy(); 5 System.out.println("あなたの名前を入力してください"); 6 h.name = new java.util.Scanner(System.in).nextLine(); 7 System.out.println(e.name+"が現れた!!\r\n君はどうする?\r\n現在の体力:"+h.hp); 8 while (true){ //ここからバトルのループのwhile 9 h.act(e); //主人公のターンでの行動 10 e.act(h); //敵のターンでの行動 11 if (h.hp == 0){ //バトルの結果表示のif 12 System.out.println("GAME OVER"); 13 break; 14 }else if (h.esc == true){ 15 System.out.println("逃亡に成功した"); 16 break; 17 }else{ 18 System.out.println("YOU WIN"); 19 break; 20 } 21 } //ここまでwhileループ 22 } 23}

Java

1public class Hero{ 2 String name; 3 int hp; 4 int atk; 5 boolean def; //防御状態かどうか 6 boolean esc; //逃走状態かどうか 7 Hero(){ 8 this.hp = 100; 9 this.atk = 15; 10 } 11 void act(){ 12 System.out.println("1 攻撃 2防御 3逃走"); 13 int commandSelect = new java.util.Scanner(System.in).nextInt(); //コマンドの入力 14 switch (commandSelect){ 15 case 1: 16 attack(); //アタックメソッドの呼び出し 17 break; 18 case 2: 19 defence(); //ディフェンスメソッドの呼び出し 20 break; 21 case 3: 22 escape(); //逃走メソッドの呼び出し 23 break; 24 } 25 } 26 void attack(Enemy e){ 27 int damage = (int)((Math.random()+1)*this.atk); //自分の攻撃力×1.0^1.9のダメージを生成 28 e.hp -= damage; 29 System.out.println("あなたは"+e.name+"に"+damage+"ダメージ与えた!!\r\n残りの体力は"+e.hp); 30 } 31 void defence(){ 32 def = true; 33 } 34 void escape(){ 35 int a = (int)(Math.random()*10); //二分の一で逃げれるかどうか 36 if (a >= 4 ){ 37 esc = true; 38 }else{ 39 esc = false; 40 } 41 } 42}

Java

1public class Enemy{ 2 String name; 3 int atk; 4 int hp; 5 Enemy(){ 6 this.hp = 200; 7 this.atk = 5; 8 this.name = "スライム"; 9 } 10 void act(){ 11 int a = (int)(Math.random()+1.1); 12 switch (a){ 13 case 1: 14 attack(); 15 break; 16 case 2: 17 grin(); 18 break; 19 } 20 } 21 void attack(Hero h){ 22 int damage = (int)((Math.random()+1)*this.atk); //自分の攻撃力×1.0^1.9のダメージを生成 23 h.hp -= damage; 24 if (h.def == true){ 25 damage = damage/2; 26 } 27 System.out.println(this.name+"の攻撃"+damage+"のダメージを食らった!!"); 28 } 29 void grin(){ 30 int a = (int)((Math.random()+1)*3)-2; 31 switch (a){ 32 case 1: 33 System.out.println(this.name+"はニタニタと笑っている"); 34 break; 35 case 2: 36 System.out.println(this.name+"は気色の悪い笑みを浮かべている"); 37 break; 38 case 3: 39 System.out.println(this.name+"は不気味な笑顔でこちらを見つめてる"); 40 break; 41 } 42 } 43}

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

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

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

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

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

guest

回答2

0

attack(Enemy e)のように、引数にEnemy型を指定したのならば、呼び出し時にもEnemy型を引数として渡してやらなければなりません。
下記のように、attack();をattack(e);※eはEnemy型とします のように書き換える必要があるかと思うのですが、そもそもHeroクラスの中にEnemyが登場しないので、どうすれば解決できるかということになると、クラスの設計から見直す必要があるのかもしれません。

Java

1 void act(){ 2 System.out.println("1 攻撃 2防御 3逃走"); 3 int commandSelect = new java.util.Scanner(System.in).nextInt(); //コマンドの入力 4 switch (commandSelect){ 5 case 1: 6 attack(e); //アタックメソッドの呼び出し 7 break; 8 case 2: 9 defence(); //ディフェンスメソッドの呼び出し 10 break; 11 case 3: 12 escape(); //逃走メソッドの呼び出し 13 break; 14 } 15 }

投稿2017/04/25 07:10

akabee

総合スコア1947

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

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

tomagurosu

2017/04/25 13:11

解決しました ありがとうございました
guest

0

ベストアンサー

actは引数無しで定義されているのに引数を渡して呼び出そうとしていますし
attackは引数を受け取るように定義されているのに引数を渡さずに呼び出しています。
矛盾のないようエラーが出ている箇所をエラー内容に従って対処(修正)してみてください。

投稿2017/04/25 07:07

HiroshiWatanabe

総合スコア2160

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

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

tomagurosu

2017/04/25 13:12

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問