0

Joachimのソリューションの後のコードは次のとおりです。

http://codepad.org/AB2gu59t

ここに私が今得るエラーがあります:

Scripts\OHDHerblaw.java:109: エラー: 未定義のラベル: label1084 if (getInventoryCount(new int[] { this.Herb }) == 0) if (getInventoryCount(new int[] { this.Unfinished }) == 0 ) if (getInventoryCount(new int[] { this.I dentified }) == 0) break label417; if (getInventoryCount(new int[] { this.Vials }) != 0) if (getInventoryCount(new int[] { this.Identified }) != 0) { if (getIn ventoryCount(new int[] { this.Vials }) != 0) if (getInventoryCount(new int[] { t his.Identified }) != 0) break label1084; if (getInventoryCount(new int[] { this. Unfinished }) != 0)

Scripts\OHDHerblaw.java:110: エラー: 未定義のラベル: label1084 break label1084; }

Scripts\OHDHerblaw.java:201: エラー: 未定義のラベル: label1391 break label1391;

Scripts\OHDHerblaw.java:202: エラー: 未定義のラベル: label1706 if (getInventoryCount(new int[] { this.Vials }) != 0) if (getInventoryCo unt(new int[] { this.Identified }) != 0 ) { if (getInventoryCount(new int[] { this.Vials }) != 0) if (getInventoryCount(new int[] { this.Identified }) != 0) break label1706; if (getInventoryCount(new int[] { this.Unfinished }) != 0)

Scripts\OHDHerblaw.java:203: エラー: 未定義のラベル: label1706 break label1706; }

5 エラー

ラベルの定義方法がわかりません。

苦労の末、うまくいきました。誰かが興味を持っている場合は、変更されたコードを次に示します。

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;

public class OHDHerblaw extends Script {

   int Herb;
   int Identified = 0;
   int Unfinished;
   int Ingrediant;
   int potsMade;
   int Vials = 464;
   int[] POTARRAY = new int[]{222, 474, 477, 480, 483, 486, 489, 492, 495, 498, 566, 569, 570};
   int[] UNIDARRAY = new int[0];
   int[] IDARRAY = new int[0];
   boolean onlyId = false;
   boolean idHerbs = false;
   boolean isMixing = false;
   boolean unfinishedOnly = false;


   public OHDHerblaw(Extension var1) {
      super(var1);
   }

   public void init(String var1) {
      String[] var2 = var1.trim().replaceAll(" ", "").split(",");
      if(!var2[0].equals("")) {
         this.Herb = Integer.parseInt(var2[0]);
         if(this.Herb <= 443) {
            if(this.Herb == 165 || this.Herb >= 435 && this.Herb <= 443) {
               this.idHerbs = true;
               this.unfinishedOnly = false;
               if(this.Herb == 165) {
                  this.Identified = 444;
                  this.Unfinished = 454;
               } else if(this.Herb > 165) {
                  this.Identified = this.Herb + 10;
                  this.Unfinished = this.Herb + 20;
               }
            }
         } else if(this.Herb >= 444) {
            if(this.Herb >= 444 && this.Herb <= 453) {
               this.Herb -= 10;
               this.Identified = this.Herb + 10;
               this.Unfinished = this.Herb + 20;
               this.idHerbs = false;
               this.unfinishedOnly = false;
            } else if(this.Herb >= 454 && this.Herb <= 463) {
               this.Herb -= 20;
               this.Identified = this.Herb + 10;
               this.Unfinished = this.Herb + 20;
               this.idHerbs = false;
               this.unfinishedOnly = true;
            }
         } else {
            System.out.println("That\'s is not a valid Herb Id...");
            this.stopScript();
         }
      }

      if(!var2[1].equals("")) {
         this.Ingrediant = Integer.parseInt(var2[1]);
         if(this.Ingrediant != 270 && this.Ingrediant != 473 && this.Ingrediant != 220 && this.Ingrediant != 219 && this.Ingrediant != 471 && this.Ingrediant != 469 && this.Ingrediant != 472 && this.Ingrediant != 501) {
            System.out.println("No ingredient selected. We will not be making full potions...");
            this.Ingrediant = 0;
            this.isMixing = false;
         } else {
            this.isMixing = true;
         }
      }

      if(this.unfinishedOnly && !this.isMixing) {
         System.out.println("Not possible, please re-check script setup...");
         this.stopScript();
      }

   }

   public int main() {

      if(this.getFatigue() >= 90) {
         this.useSleepingBag();
         return this.random(800, 1000);
      } else {
         if(!this.onlyId) {
            int[] var1;
            if(this.isMixing) {
               if(this.idHerbs && this.getInventoryCount(new int[]{this.Herb}) > 0) {
                  this.useItem(this.getInventoryIndex(new int[]{this.Herb}));
                  return this.random(200, 350);
               }

               if(this.getInventoryCount(new int[]{this.Identified}) > 0 && this.getInventoryCount(new int[]{this.Vials}) > 0 && this.getInventoryCount(new int[]{this.Herb}) == 0) {
                  this.useItemWithItem(this.getInventoryIndex(new int[]{this.Identified}), this.getInventoryIndex(new int[]{this.Vials}));
                  return this.random(200, 350);
               }

               if(this.getInventoryCount(new int[]{this.Ingrediant}) > 0 && this.getInventoryCount(new int[]{this.Unfinished}) > 0) {
                  this.useItemWithItem(this.getInventoryIndex(new int[]{this.Ingrediant}), this.getInventoryIndex(new int[]{this.Unfinished}));
                  return this.random(500, 600);
               }

               if(this.getInventoryCount(new int[]{this.Herb}) == 0 && this.getInventoryCount(new int[]{this.Unfinished}) == 0 && this.getInventoryCount(new int[]{this.Identified}) == 0 || this.getInventoryCount(new int[]{this.Vials}) == 0 || this.getInventoryCount(new int[]{this.Identified}) == 0 || (this.getInventoryCount(new int[]{this.Vials}) == 0 || this.getInventoryCount(new int[]{this.Identified}) == 0) && this.getInventoryCount(new int[]{this.Unfinished}) == 0) {
                  if(this.isQuestMenu()) {
                     this.answer(0);
                     return this.random(2000, 3000);
                  }

                  if(this.isBanking()) {
                     int var2;
                     if(this.unfinishedOnly) {
                        if(this.getInventoryCount(new int[]{this.Ingrediant}) == 0 || this.getInventoryCount(new int[]{this.Unfinished}) == 0) {
                           for(var2 = 0; var2 < this.POTARRAY.length; ++var2) {
                              if(this.getInventoryCount(new int[]{this.POTARRAY[var2]}) > 0) {
                                 this.deposit(this.POTARRAY[var2], this.getInventoryCount(new int[]{this.POTARRAY[var2]}));
                                 return this.random(1250, 1500);
                              }
                           }
                        }

                        if(this.getInventoryCount(new int[]{this.Unfinished}) == 0) {
                           this.withdraw(this.Unfinished, 14);
                           return this.random(1500, 2000);
                        }

                        if(this.getInventoryCount(new int[]{this.Ingrediant}) == 0 && this.getInventoryCount(new int[]{this.Unfinished}) > 0) {
                           this.withdraw(this.Identified, this.getInventoryCount(new int[]{this.Unfinished}));
                           return this.random(1500, 2000);
                        }

                        this.closeBank();
                        return this.random(200, 300);
                     }

                     if(!this.unfinishedOnly) {
                        if(this.getInventoryCount(new int[]{this.Ingrediant}) == 0 || this.getInventoryCount(new int[]{this.Unfinished}) == 0) {
                           for(var2 = 0; var2 < this.POTARRAY.length; ++var2) {
                              if(this.getInventoryCount(new int[]{this.POTARRAY[var2]}) > 0) {
                                 this.deposit(this.POTARRAY[var2], this.getInventoryCount(new int[]{this.POTARRAY[var2]}));
                                 return this.random(1250, 1500);
                              }
                           }
                        }

                        if(this.getInventoryCount(new int[]{this.Unfinished}) > 0) {
                           this.withdraw(this.Ingrediant, this.getInventoryCount(new int[]{this.Unfinished}));
                           this.closeBank();
                           return this.random(2000, 3000);
                        }

                        if(this.getInventoryCount(new int[]{this.Vials}) == 0) {
                           this.withdraw(this.Vials, 14);
                           return this.random(1000, 1500);
                        }

                        if(this.getInventoryCount(new int[]{this.Herb}) == 0 && this.getInventoryCount(new int[]{this.Unfinished}) == 0 && this.getInventoryCount(new int[]{this.Identified}) == 0 && this.idHerbs) {
                           this.withdraw(this.Herb, 14);
                           return this.random(2000, 3000);
                        }

                        if(this.getInventoryCount(new int[]{this.Identified}) == 0) {
                           this.withdraw(this.Identified, 14);
                           return this.random(1000, 1500);
                        }

                        this.closeBank();
                        return this.random(1000, 1500);
                     }
                  }

                  var1 = this.getNpcByIdNotTalk(this.BANKERS);
                  if(var1[0] != -1 && !this.isBanking() && !this.isQuestMenu() && this.getInventoryCount(new int[]{this.Ingrediant}) == 0) {
                     this.talkToNpc(var1[0]);
                     return this.random(3250, 3500);
                  }
               }
            }

            if(!this.isMixing) {
               if(this.idHerbs && this.getInventoryCount(new int[]{this.Herb}) > 0) {
                  this.useItem(this.getInventoryIndex(new int[]{this.Herb}));
                  return this.random(200, 350);
               }

               if(this.getInventoryCount(new int[]{this.Identified}) > 0 && this.getInventoryCount(new int[]{this.Vials}) > 0 && this.getInventoryCount(new int[]{this.Herb}) == 0) {
                  this.useItemWithItem(this.getInventoryIndex(new int[]{this.Identified}), this.getInventoryIndex(new int[]{this.Vials}));
                  return this.random(200, 350);
               }

               if(this.getInventoryCount(new int[]{this.Herb}) == 0 && this.getInventoryCount(new int[]{this.Unfinished}) == 0 && this.getInventoryCount(new int[]{this.Vials}) == 0 && this.getInventoryCount(new int[]{this.Identified}) == 0 || this.getInventoryCount(new int[]{this.Vials}) == 0 || this.getInventoryCount(new int[]{this.Identified}) == 0 || (this.getInventoryCount(new int[]{this.Vials}) == 0 || this.getInventoryCount(new int[]{this.Identified}) == 0) && this.getInventoryCount(new int[]{this.Unfinished}) == 0) {
                  if(this.isQuestMenu()) {
                     this.answer(0);
                     return this.random(2000, 3000);
                  }

                  if(this.isBanking()) {
                     if(this.getInventoryCount(new int[]{this.Herb}) == 0 && this.getInventoryCount(new int[]{this.Unfinished}) == 0 && this.getInventoryCount(new int[]{this.Vials}) == 0 && this.getInventoryCount(new int[]{this.Identified}) == 0 && this.idHerbs) {
                        this.withdraw(this.Herb, 14);
                        return this.random(2000, 3000);
                     }

                     if(this.getInventoryCount(new int[]{this.Unfinished}) > 0) {
                        this.deposit(this.Unfinished, this.getInventoryCount(new int[]{this.Unfinished}));
                        return this.random(200, 300);
                     }

                     if(this.getInventoryCount(new int[]{this.Vials}) == 0) {
                        this.withdraw(this.Vials, 14);
                        return this.random(1000, 1500);
                     }

                     if(this.getInventoryCount(new int[]{this.Identified}) == 0) {
                        this.withdraw(this.Identified, 14);
                        return this.random(1000, 1500);
                     }

                     this.closeBank();
                     return this.random(1000, 1500);
                  }

                  var1 = this.getNpcByIdNotTalk(this.BANKERS);
                  if(var1[0] != -1 && !this.isBanking() && !this.isQuestMenu()) {
                     this.talkToNpc(var1[0]);
                     return this.random(3500, 3750);
                  }
               }
            }
         }

         return this.random(200, 300);
      }
   }
}
4

4 に答える 4

2

ラベルは、ステートメントの前にのみ使用できます (JLS §14.7)

ローカル変数の宣言はステートメントではありません(JLS で言えば、ステートメントのスーパーセットである「ブロック ステートメント」(JLS §14.2)です)。

ラベルの前int[] arrayOfInt;の行に移動するだけで、うまくいくはずです。

int[] arrayOfInt;
label417:
if (this.isMixing) {
  ...
于 2012-12-18T14:32:03.260 に答える
1

ラベルの後にステートメントが続く必要があります。あなたのコードでは、その後に変数宣言が続きますが、これはステートメントではありません。

変数宣言の後にラベルを移動します。

int[] arrayOfInt;

label417:
if (this.isMixing) {
    // ...

ところで、Java コードでラベルを使用することは、コードの設計に何か問題があることを示すコードの匂いだと考えています。ラベルはgoto ステートメントのようなもので、コードを理解しにくくする悪名高い構造です (スパゲッティ コードにつながります)。

ラベルを使用する代わりに、forまたはwhileループなどの他の制御構造を使用します。

于 2012-12-18T14:36:17.407 に答える
1

@Joachimの答えはそれを釘付けにしました。

理由を説明したいだけです...

ステートメントは、指定されたラベルを持つ現在のメソッド内の外側のステートメントにのみ分割できbreak <label>ます。ローカル変数宣言にステートメントを含めることはできません。したがって、ローカル変数の宣言も破ることはできません。breaklabel

break <label>C / C++ ステートメントのようなステートメントを使用しようとしていたと思われますgoto。そのようには機能しません。そこでレッテルが許されていても、それを破ることはできません。たとえば、これは同様に間違っています。

label: if (i == 1) {
   // so something
}
if (i == 2) {
   break label;  // compilation error
}
于 2012-12-18T14:37:17.390 に答える
0

割り当てのラベルの構文は少し異なります。

 int i;
 label12: i = 42; // label on the assignment

ラベルに値を割り当てる場合は、最初に定義する必要があります。

あなたの場合、コードを次のように変更します。

if (!this.onlyId)
    {
      int[] arrayOfInt;
      label417:      
      if (this.isMixing)
      {
        if (this.idHerbs) {
          if (getInventoryCount(new int[] { this.Herb }) > 0) {
            useItem(getInventoryIndex(new int[] { this.Herb }));
            return random(200, 350);
          }
        }
于 2012-12-18T14:33:44.667 に答える