以下是Joachim解决方案之后的代码:
以下是我现在遇到的错误:
脚本\ 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 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;如果 (getInventoryCount(new int [] {this.Unfinished})!= 0)
脚本\ OHDHerblaw.java:110:错误:未定义标签:label1084 break label1084; }
脚本\ 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)
脚本\ 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);
}
}
}
答案 0 :(得分:2)
标签只能是used before a statement (JLS §14.7)。
局部变量声明不是一个声明(在JLS中说它是a "block statement" (JLS §14.2),这是一组超级语句。)
简单地将您的int[] arrayOfInt;
移至标签前的行,您应该做得很好:
int[] arrayOfInt;
label417:
if (this.isMixing) {
...
答案 1 :(得分:1)
标签后面必须跟声明。在你的代码中,它后跟一个变量声明,它不是一个声明。
在变量声明后移动标签:
int[] arrayOfInt;
label417:
if (this.isMixing) {
// ...
顺便说一句,我认为在Java代码中使用标签作为code smell - 这表明代码设计有问题。标签就像goto statement,这是一个臭名昭着的结构,使代码难以理解(它导致spaghetti code)。
使用其他控制结构,例如for
或while
循环,而不是使用标签。
答案 2 :(得分:1)
@Joachim的答案已经确定了。
我只想解释为什么......
break <label>
语句只能将 out 分解为具有给定标签的当前方法中的封闭语句。局部变量声明不能包含break
语句。因此,局部变量声明中的label
也不能被破坏。
我怀疑您尝试使用break <label>
语句,就像C / C ++ goto
语句一样。它不起作用。即使在那里允许使用标签,您也无法破解它。例如,这同样是错误的:
label: if (i == 1) {
// so something
}
if (i == 2) {
break label; // compilation error
}
答案 3 :(得分: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);
}
}