所以我仍然忙于完成我的大任务(感谢大家帮我弄清楚我的循环问题)。现在我开始制作一个checkDigit()方法,用于验证isbn#上的校验位是否有效(我刚刚开始搞砸了)。这是问题:我试图编译它,但编译器告诉我在方法调用中有预期的。这是我的初学者代码的片段:
private String validateISBN(String bookNum)throws ISBNException
{
boolean check=false;
bookNum.replaceAll("-","");
if (bookNum.length()!=ISBN_NUM)
throw new ISBNException ("ISBN "+ bookNum + " must be 10 characters");
for (int i=0;i<bookNum.length()-1;i++)
{
if (Character.isDigit(bookNum.charAt(i)))
check=true;
}
if (bookNum.charAt(9)=='X') check=true;
if (Character.isDigit(bookNum.charAt(9))) check=true;
if (check=false) throw new ISBNException ("ISBN " + bookNum + " must contain all digits" +
"or 'X' in the last position");
if (checkDigit()=false)
throw new ISBNException ("ISBN " + bookNum + " is invalid.\n" +
"ISBN " + bookNum + " should be " + validnum);
if (check=true) return bookNum;
}
public boolean checkDigit (bookNum)
{
double total=0.0;
char[] check = {1,2,3,4,5,6,7,8,9,X};
int[] checkNums= {1,2,3,4,5,6,7,8,9,10};
for (int i=0;i<bookNum.length;i++)
check(i)=bookNum[i];
total+=check[i]*checkNums[i];
这究竟是什么意思?通常情况下,这只意味着我在某处错过了大括号,但这次并非如此。
修改
抱歉这个明显而愚蠢的问题。对于那些要求查看实际编译器消息的人,我把它放在最顶层(埋藏),那就是编译器
预期的标识符
但实际上我把&lt;&gt;标识符周围的标签,所以它取出了单词标识符,现在它说,“....但编译器告诉我在方法调用中有预期,而不是,”....但编译器告诉我在方法调用中有一个预期的标识符。
原来在开头的输入来自文本字段(我正在输入问题),因为当我粘贴代码时,它说'在这里输入代码',而我没有取出输入。
抱歉
答案 0 :(得分:3)
好吧,看来你实际上错过了checkDigit
方法的结束大括号,加上enter
方法之前的迷路validateISBN
做了什么?此外,您需要在bookNum
方法中输入checkDigit
参数,即checkDigit(String bookNum)
最后,你试图在不传递任何参数的情况下调用checkDigit()
:
if (checkDigit()=false)
throw new ISBNException ("ISBN " + bookNum + " is invalid.\n" +
"ISBN " + bookNum + " should be " + validnum);
您需要在此方法调用中提供bookNum
。
此外,将编译器消息与您的问题一起发布是一个很好的主意;有人几乎立即要求你这样做,所以就这样做吧。另外,如果你花一点时间阅读编译器消息,通常很明显是什么问题,至少对于像语法不正确这样简单的事情。
答案 1 :(得分:1)
乍一看,您似乎在enter
的方法签名之前有一个迷路validateISBN
,并且您还缺少bookNum
checkDigit
参数的类型声明方法。
答案 2 :(得分:1)
如果将'X'放在检查数组的单引号中,是否可以解决问题?