繁体   English   中英

Java标签和中断错误

[英]Java label and break error

这是Joachim解决方案之后的代码:

http://codepad.org/AB2gu59t

这是我现在得到的错误:

Scripts \\ OHDHerblaw.java:109:错误:未定义标签:label1084 if(getInventoryCount(new int [] {this.Herb})== 0)if(getInventoryCou nt(new int [] {this.Unfinished})== 0 )if(getInventoryCount(new int [] {this.I identified})== 0)中断label417; if(getInventoryCount(new int [] {this.Vials})!= 0)if(getInventoryCount(new int [] {this.Identified})!= 0){if(getInventoryCount(new int [] {this.Vials })!= 0)如果(getInventoryCount(new int [] {t his.Identified})!= 0)打破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 [] {thi s.Vials})!= 0)if(getInventoryCount(new int [] {this.Identified})!= 0)brea k 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);
      }
   }
}

标签只能在语句之前使用(JLS§14.7)

局部变量声明不是语句(用JLS讲,它是“块语句”(JLS§14.2) ,它是语句的超集)。

只需移动int[] arrayOfInt; 到标签前面的那一行,您应该会很好:

int[] arrayOfInt;
label417:
if (this.isMixing) {
  ...

标签后必须有一个声明 在您的代码中,它后面是变量声明,而不是语句。

在变量声明后移动标签:

int[] arrayOfInt;

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

顺便说一句,我认为在Java代码中使用标签是一种代码味道 -这表明该代码的设计存在问题。 标签就像goto语句 ,这是一个臭名昭著的构造,使代码难以理解(导致产生意大利面条式代码 )。

代替使用标签,可以使用其他控制结构,例如forwhile循环。

@Joachim的答案已经确定了。

我只想解释为什么...

break <label>语句只能突破到在具有给定标记的当前方法的包围语句。 局部变量声明不能包含break语句。 因此,局部变量声明上的label也不能被破坏。

我怀疑您正在尝试像C / C ++ goto语句一样使用break <label>语句。 那样行不通。 即使标签被允许在那里,您也将无法使用它。 例如,这同样是错误的:

label: if (i == 1) {
   // so something
}
if (i == 2) {
   break label;  // compilation error
}

分配标签的语法略有不同:

 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);
          }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM