另一个作业问题错误需要意外类型:找到变量:值

时间:2011-02-18 03:29:23

标签: java

我有另一个错误,需要意外类型:找到变量:值,我无法弄清楚原因。代码如下:

public class ISBNText extends JTextField
{  
    protected static final int ISBN_NUM=10;
    protected static String bookNum;
    protected JTextField  bookText; 
    protected String valid;
    public ISBNText() 
    {
        super(20);
    }   

    public String getISBN()
    {           
        bookNum = getText();
        return bookNum;
    }

    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(bookNum)=false)      //////////COMPILER   ERROR    HERE////////
            throw new ISBNException ("ISBN " + bookNum + " is invalid.\n" + 
                "ISBN " + bookNum + " should be " + validnum);
        if (check=true) return bookNum;
    }                             

    public boolean checkDigit (String bookNum)
    {
        boolean status;
        double total=0.0;
        char[] check   = {0,1,2,3,4,5,6,7,8,9,X};
        int[] checkNums= {0,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];
        }    
        if ((checkNums[9] % 11)==check[9])
            status = true;
        else 
            status=false;
    }
}

此程序用于检查用户输入的ISBN号的有效性。我不明白为什么它说它找到了值并且它期望一个变量,因为bookNum是一个变量。我毫不怀疑这是因为我的知识有限。希望你们能再帮助我一次。

4 个答案:

答案 0 :(得分:3)

这项任务(没有意义)

if (checkDigit(bookNum)=false)

应该是一个等式

if (checkDigit(bookNum)==false)

better,只是表达式

if (!checkDigit(bookNum))

另见:

答案 1 :(得分:1)

checkDigit(bookNum)=false应该是!checkDigit(bookNum)

同样的事情if (check=false)应该是if(!check) 另一个用if(check = true)

此外,

for (int i=0;i<bookNum.length;i++)
{
    check(i)=bookNum[i];
    total+=check[i]*checkNums[i];
}    

应该是:

for (int i=0;i<bookNum.length();i++)
{
    (something, but definitely not a function result)=bookNum.charAt(i);
    total+=check[i]*checkNums[i];
}

另外,

char[] check   = {0,1,2,3,4,5,6,7,8,9,X}; // X won't compile

另外,

checkDigit没有回复。

另外,

未声明validnum

答案 2 :(得分:1)

您需要使用charAt,而不是bookNum方法中checkDigit变量的数组索引表示法。字符串不是数组。

答案 3 :(得分:0)

您需要使用==,而不是=。前者检查是否相等,后者是赋值运算符。或者,您可以执行if (!checkDigit(bookNum)),而不是与false明确比较。