我刚才问过这个阵列,我看不出问题所在。太累了。我做错了什么?基本上,我正在使用字符串数组并尝试检查它是否包含数字或x(ISBN号验证)。我想从给定输入(bookNum)中获取数字,检查输入,并将任何有效输入提供给新数组(书)。在
行'bookNum.charAt[j]==book[i]'
我得到'不是声明错误'。是什么给了什么?
String[] book = new String [ISBN_NUM];
bookNum.replaceAll("-","");
if (bookNum.length()!=ISBN_NUM)
throw new ISBNException ("ISBN "+ bookNum + " must be 10 characters");
for (int i=0;i<bookNum.length();i++)
{
if (Character.isDigit(bookNum.charAt(i)))
bookNum.CharAt[j]==book[i];
j++;
if (book[9].isNotDigit()||
book[9]!="x" ||
book[9]!="X")
throw new ISBNException ("ISBN " + bookNum + " must contain all digits" +
"or 'X' in the last position");
答案 0 :(得分:5)
==是java用于等价比较。如果要分配它,请使用单个=。
答案 1 :(得分:2)
这里的第一个问题是charAt
是一个函数,因此即使您使用像数组这样的索引进行访问也需要括号。
另一个问题是该行是一个布尔表达式,它本身并不意味着什么。很多人都暗示你要对这个角色进行任务,但只是换成一个等于导致其他问题。等号的左侧需要是变量,函数的结果不是变量。
字符串是不可变的,因此您不能简单地更改字符串中的一个字符。在代码的前面,您调用replaceAll()
,返回带有更改的新字符串。如上所述,这个改变的字符串正在丢失。
答案 2 :(得分:1)
bookNum.CharAt[j]==book[i];
应该是
bookNum.CharAt[j]=book[i];
您使用的是相等布尔运算符,而不是赋值运算符。
答案 3 :(得分:1)
行bookNum.CharAt[j]==book[i];
不是声明。这是一个比较。也许您需要bookNum.CharAt[j]=book[i];
(单=
而不是==
)。
编辑:这不会解决问题,因为你无法分配给bookNum.CharAt[j]
。
答案 4 :(得分:1)
看起来你正在使用.charAt(i)错了!假设“bookNum”是一个String,你应该使用:
bookNum.charAt(i)==book[i];
相反。请注意,这是一个布尔表达式,而不是“=”。
答案 5 :(得分:1)
这里有一些奇怪的问题。对于初学者来说,你的意思是书是一个字符串数组,而不是只有一个字符串?你正在尝试(假设CharAt写得正确并且分配正确)将字符分配给字符串。
其次,不是逐个字符地复制,为什么不检查整个字符串,如果它是一个合适的ISBN,最后复制整个字符串?根据您对异常执行的操作(如果继续执行),可以添加布尔值作为标记,如果出现错误则会设置该标志。最后,如果没有错误,那么将book = to booknumber.replace(etc ...)