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

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

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

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

Q&A

解決済

1回答

1243閲覧

某モンスターゲームのような動きをするプログラムを書いてみましたがよくわからないエラーが出てきました。

chimo

総合スコア55

Java

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

0グッド

0クリップ

投稿2020/04/28 12:33

コーディングの練習として某モンスターゲームのようなふるまいをしてくれるコードを書いてみました。しかしよくわからないエラーがでてしまい困っていおります。以下にコード、エラー内容を記します。

java

1import java.math.BigDecimal; 2 3class Monster3{ 4 //------フィールド------ 5 private String character; //種族 6 private String trainer; //トレーナー 7 private String name; //なまえ 8 private int lv; //レベル 9 private int hp; //HP 10 private int atk; //こうげき 11 private int def; //ぼうぎょ 12 private int spd; //すばやさ 13 private int hp_max; //HP初期値 14 private String waza_nm; //わざ(なまえ) 15 private String waza_dmg_rate; //わざ(ダメージ倍率) 16 17 //------コンストラクタ------- 18 //コンストラクタ① 19 Monster3(){ 20 this.character = "(unknown)"; 21 this.trainer = "(wild)"; 22 this.name = "(noname)"; 23 this.lv = 1; 24 this.hp = 30; 25 this.atk = 15; 26 this.def = 10; 27 this.spd = 10; 28 this.hp_max = 30; 29 this.waza_nm = "たいあたり"; 30 this.waza_dmg_rate = "1.0"; 31 } 32 33 //コンストラクタ② 34 Monster3( String tr,String nm ){ 35 this(); 36 this.trainer = tr; 37 this.name = nm; 38 } 39 40 //コンストラクタ③ 41 Monster3( String tr,String nm,int initial_lv ){ 42 this(tr,nm); 43 levelUp(initial_lv - 1); 44 } 45 46 //------メソッド------- 47 //levelUpメソッド 48 public void levelUp( int lv_up ){ 49 if( lv_up == 0){ 50 //処理なし 51 }else if( lv_up > 0 ){ 52 this.lv = lv + lv_up * 1; 53 this.hp_max = hp_max + lv_up * 15; 54 this.atk = atk + lv_up * 5; 55 this.def = def + lv_up * 5; 56 this.spd = spd + lv_up * 5; 57 this.hp = hp_max; 58 } 59 } 60 61 //setWazaメソッド 62 public void setWaza( String wz_nm, String wz_dg_rt ){ 63 String str = wz_dg_rt ; 64 65 if( str.matches("^[0-9]+.[0-9]$")){ 66 this.waza_nm = wz_nm; 67 this.waza_dmg_rate = wz_dg_rt; 68 }else{ 69 System.out.println("[ERROR]わざの設定に失敗しました"); 70 } 71 } 72 73 //getStatusメソッド 74 public String getStatus(){ 75 String resultMessage = "[" + this.name + "lv" + this.lv + "HP" + this.hp + "/" + this.hp_max + "]" ; 76 return resultMessage ; 77 } 78 79 //useWazaメソッド 80 public int useWaza(){ 81 BigDecimal a = BigDecimal.valueOf(this.atk); 82 BigDecimal w = new BigDecimal(this.waza_dmg_rate); 83 BigDecimal give_dmg = (a.multiply(w)).setScale(0,BigDecimal.ROUND_DOWN); 84 85 int result_give_dmg = give_dmg.intValue(); 86 87 return result_give_dmg; 88 } 89 90 //damagedメソッド 91 public int damaged(int gv_dmg){ 92 //ダメージ減算率を求める 93 BigDecimal one = new BigDecimal("1"); 94 BigDecimal hun_twny = new BigDecimal("120"); 95 BigDecimal df = BigDecimal.valueOf(this.def); 96 BigDecimal denom = one.add(df.divide(hun_twny)); 97 BigDecimal given_dmg_rate = one.divide(denom,2,BigDecimal.ROUND_UP); 98 99 //実際に受けるダメージを求める 100 BigDecimal gd = BigDecimal.valueOf(gv_dmg); 101 BigDecimal given_dmg = gd.multiply(given_dmg_rate); 102 int result_given_dmg = given_dmg.intValue(); 103 104 //HPの変化 105 if( this.hp > result_given_dmg ){ 106 this.hp = hp - result_given_dmg; 107 }else{ 108 this.hp = 0; 109 } 110 return result_given_dmg; 111 } 112 113 //-----getter/setter----- 114 //String character 115 public String getCharacter(){ 116 return this.character; 117 } 118 public void setCharacter(){ 119 this.character = character; 120 } 121 122 //String trainer 123 public String getTrainer(){ 124 return this.trainer; 125 } 126 public void setTrainer(){ 127 this.trainer = trainer; 128 } 129 130 //String name 131 public String getName(){ 132 return this.name; 133 } 134 public void setName(){ 135 this.name = name; 136 } 137 138 //int lv 139 public int getLv(){ 140 return this.lv; 141 } 142 public void setLv(){ 143 this.lv = lv; 144 } 145 146 //int hp 147 public int getHp(){ 148 return this.hp; 149 } 150 public void setHp(){ 151 this.hp = hp; 152 } 153 154 //int atk 155 public int getAtk(){ 156 return this.atk; 157 } 158 public void setAtk(){ 159 this.atk = atk; 160 } 161 162 //int def 163 public int getDef(){ 164 return this.def; 165 } 166 public void setDef(){ 167 this.def = def; 168 } 169 170 //int spd 171 public int getSpd(){ 172 return this.spd; 173 } 174 public void setSpd(){ 175 this.spd = spd; 176 } 177 178 //int hp_max 179 public int getHp_max(){ 180 return this.hp_max; 181 } 182 public void setHp_max(){ 183 this.hp_max = hp_max; 184 } 185 186 //String waza_nm 187 public String getWaza_nm(){ 188 return this.waza_nm; 189 } 190 public void setWaza_nm(){ 191 this.waza_nm = waza_nm; 192 } 193 194 //String waza_dmg_rate 195 public String getWaza_dmg_rate(){ 196 return this.waza_dmg_rate; 197 } 198 public void setWaza_dmg_rate(){ 199 this.waza_dmg_rate = waza_dmg_rate; 200 } 201 202} 203

java

1class Fushigiyade extends Monster3{ 2 //-----フィールド----- 3 //なし 4 5 //-----コンストラクタ----- 6 //コンストラクタ① 7 Fushigiyade(){ 8 super(); 9 super.setCharacter("フシギヤデ"); 10 } 11 12 //コンストラクタ② 13 Fushigiyade( String tr,String nm ){ 14 super(tr,nm); 15 super.setCharacter("フシギヤデ"); 16 } 17 18 //コンストラクタ③ 19 Fushigiyade( String tr,String nm,int initial_lv ){ 20 super(tr,nm,initial_lv); 21 super.setCharacter("フシギヤデ"); 22 } 23 24 //-----メソッド----- 25 //levelUpメソッドをオーバーライド 26 public void levelUp( int lv_up ){ 27 if( lv_up == 0 ){ 28 //処理なし 29 }else if( lv_up > 0 ){ 30 super.setLv( super.getLv() + lv_up*1 ); 31 super.setHp_max( super.getHp_max() + lv_up*14 ); 32 super.setAtk( super.getAtk() + lv_up*8 ); 33 super.setDef( super.getDef() + lv_up*5 ); 34 super.setSpd( super.getSpd() + lv_up*9 ); 35 super.setHp( super.getHp_max ); 36 } 37 } 38}

【エラー内容】一部抜粋(※字数制限により)

java

1C:\WorkSpace\Java.Ob\Practice\Test>javac SimulateMonsterBattle.java 2.\Monster3.java:70: error: illegal escape character 3 if( str.matches("^[0-9]+.[0-9]$")){ 4 ^ 5.\Fushigiyade.java:9: error: method setCharacter in class Monster3 cannot be applied to given types; 6 super.setCharacter("フシギヤデ"); 7 ^ 8 required: no arguments 9 found: String 10 reason: actual and formal argument lists differ in length 11.\Hitokake.java:35: error: cannot find symbol 12 super.setHp( super.getHp_max ); 13 ^ 14 symbol: variable getHp_max 1519 errors

このエラーのまず一番先頭の「illegal escape character」とありますが、「.」の部分に山印がついていたのでそこがエラーの原因なのかとおもいますが、「.」を含むプログラムでエラーがでないものが検索するとございましたので、何が間違っているのか分からないです。
また他のほとんどのエラーにある「cannot be applied to given types」の部分も調べても英語ばかりでエラー内容がよくわかりませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

最初のエラー

バックスラッシュ\は、Javaコード上で直接表現できない文字を表現するために他の文字とペアにして使います。\tでタブ文字、\nで改行コードといった具合に。それで表現できる中に.というものは存在しないため、コンパイラが解釈できずにエラーとなっています。
当該箇所では正規表現として、文字列の.を入れる必要があります。そのためには\を、先程のような用途ではなく\そのものとして解釈してもらわなければなりません。そのために、\のように2つ重ねて入れる必要があります。つまり、こうなります。

java

1 if( str.matches("^[0-9]+\.[0-9]$"))

2つ目のエラー

setCharacterメソッドに文字列を渡していますが、文字列を受け取るsetCharacterメソッドが存在しません。

投稿2020/04/28 12:52

swordone

総合スコア20651

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

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

chimo

2020/04/29 04:34

ありがとうございます!!無事できました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問