我之前问了一个关于数组的问题,但是这个不会编译

时间:2011-02-17 21:55:56

标签: java

我刚才问过这个阵列,我看不出问题所在。太累了。我做错了什么?基本上,我正在使用字符串数组并尝试检查它是否包含数字或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");

6 个答案:

答案 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 ...)