シンボルが見つかりません
- 評価
- クリップ 0
- VIEW 1,501
Atom最新verでjavaのプログラミングを行いコンパイルをしたらシンボルを見つけられませんとエラーが出てきます。
以下はコードです。
main.javaのyuusyaクラス以外のlastbossクラスなどは名前が違うだけでコードはほとんど同じのため載せていません
[Human.java]
public class Human{
private String name = null;
private int gender = 0;
private int length = 0;
private int weight = 0;
private int vitality = 0;
private int magic = 0;
public Human(){
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getGender(){
return gender;
}
public void setGender(int gender){
this.gender = gender;
}
public int getLength(){
return length;
}
public void setLength(int length){
this.length = length;
}
public int getWeight(){
return weight;
}
public void setWeight(int weight){
this.weight = weight;
}
public int getVitality(){
return vitality;
}
public void setVitality(int vitality){
this.vitality = vitality;
}
public int getMagic(){
return magic;
}
public void setMagic(int magic){
this.magic = magic;
}
public void talk(String about){
System.out.println(about);
}
public void eatFood(String food){
int foodtype = 0;
if(food == "薬草"){
foodtype = 1;
}
else if(food == "魔法の聖水"){
foodtype = 2;
}
else{
foodtype = 3;
}
digestFood(foodtype);
}
private void digestFood(int foodtype){
if(foodtype == 1){
vitality += 23;
}
else if(foodtype == 2){
magic += 22;
}
else{
vitality += 1;
}
}
}
[Yuusya.java]
public class Yuusya extends Human{
public Yuusya(){
super.setName("スサ");
super.setGender(1);
super.setLength(188);
super.setWeight(67);
super.setVitality(132);
super.setMagic(25);
}
public void normalAttack(Human target){
String name = super.getName();
int effect = 0;
System.out.println(name + "の攻撃!");
System.out.println(target.getName()+"に52ダメージを与えた!");
if(target.getVitality() <= 0){
effect = 0;
}
if(effect == 0){
System.out.println(target.getName() + "は力尽きた!");
}
System.out.println(target.getName() + "の体力は"+target.getVitality()+"になった!");
System.out.println("");
}
public void specialcom(Human target){
String name = super.getName();
System.out.println(name + "の攻撃!");
System.out.println(name + "の必殺技発動!");
System.out.println("必殺技名");
target.setVitality(target.getVitality()-132);
System.out.println(target.getName()+"に132ダメージを与えた!");
System.out.println(target.getName() + "の体力は"+target.getVitality()+"になった!");
System.out.println("");
}
}
[main.java]
import java.util.Scanner;
public class main{
public static void main(String[] args){
Yuusya yuusya = new Yuusya();
Wizard wizard = new Wizard();
Cleric cleric = new Cleric();
Lastboss lastboss = new Lastboss();
Scanner scan = new Scanner(System.in);
System.out.println(lastboss.getName()+"が現れた!");
System.out.println(yuusya.getName()+"はどうする?");
System.out.print("1:攻撃 ");
System.out.print("2:必殺技 ");
System.out.print("3:道具 ");
int command = scan.nextInt();
buttle(command,yuusya);
System.out.println(yuusya.getName()+"は薬草を使った");
yuusya.eatFood("薬草");
public static void buttle(int command,Human target){
if(command == 1){
target.normalAttack(lastboss);
}
else if(command == 2){
target.specialcom(lastboss);
}
//else if(command == 3){
//}
}
}
エラーメッセージ
main.java:42: エラー: シンボルを見つけられません
target.normalAttack(lastboss);
^
シンボル: 変数 lastboss
場所: クラス main
main.java:45: エラー: シンボルを見つけられません
target.specialcom(lastboss);
^
シンボル: 変数 lastboss
場所: クラス main
該当コード
public static void buttle(int command,Human target){
if(command == 1){
target.normalAttack(lastboss);
}
else if(command == 2){
target.specialcom(lastboss);
}
//else if(command == 3){
//}
}
以上です。
buttleメソッドと「〜が現れた!」〜「int command~」を消し、main内でyuusya.normalAttack(lastboss)とすると普通に実行できるのですがコマンドバトル風に作りたいと思ってます。
どうかよろしくお願いします。
追記: ご指摘の通りmainメソッド内にbuttleメソッドがあるようになってましたが最後の「}」が抜けていました。 buttleメソッドはmainメソッド外にあります。
あとエラーメッセージと該当コードが少し違っていました。
該当コード: lastboss.getName()→lastbossの間違いです。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
ローカル変数lastbossはmainメソッド外からはアクセスできません。
次のどちらかで解決できます。
- buttleメソッドがlastbossを受け取るようにする
- lastbossをmainクラスのstaticフィールドにする
現状の手続き的なコードのまま突き進むのなら、前者の方が有用です。
しかし効率良く開発するためには、全体的に少しずつリファクタしていく必要があるでしょう。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
mainメソッドでLastboss()クラスをnewしているからです。
変数のスコープ(有効範囲)は定義された場所で決まります。
mainメソッド内で定義された変数であれば別のメソッドに引き継ぐことはできません。
グローバルスコープにうつすか、もしnewしたメソッド内で利用しないのであれば、利用するメソッドにnewする場所を移してください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
m.ts10806
2018/09/24 18:09
mainメソッドの中にbuttleメソッドがあるように見受けられますが、本当にこれはこのままのコードですか?
susanowo1853
2018/09/24 18:51
ご指摘ありがとうございます。最後の「}」が抜けていました。
m.ts10806
2018/09/24 22:11
編集されたようですがまだmainメソッドの中にありますよ。インデント合わせてください