unit
unit

Reputation: 415

another homework question error unexpected type required:variable found:value

I have another error, unexpected type required:variable found:value and I can't figure out why. The code is as follows:

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;
    }
}

This program is being used to check the validity of an ISBN number entered by a user. I don't understand why it says it finds value and it expects a variable, as bookNum is a variable. I have no doubt that this is due to my limited knowledge. Hoping you guys can help me out one more time.

Upvotes: 2

Views: 3073

Answers (4)

POSIX_ME_HARDER
POSIX_ME_HARDER

Reputation: 762

checkDigit(bookNum)=false should be !checkDigit(bookNum)

Same thing for if (check=false) which should be if (!check) Another with if (check=true)

Also,

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

Should be :

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

Plus,

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

Plus,

checkDigit has no return.

Plus,

validnum is not declared

Upvotes: 1

BalusC
BalusC

Reputation: 1109112

This assignment (which doesn't make sense)

if (checkDigit(bookNum)=false)

should rather have been an equation

if (checkDigit(bookNum)==false)

or, better, just an expression

if (!checkDigit(bookNum))

See also:

Upvotes: 3

Rick Goldstein
Rick Goldstein

Reputation: 299

You need to use ==, not =. The former checks for equality, the latter is an assignment operator. Alternatively, you could just do if (!checkDigit(bookNum)), rather than an explicit comparison to false.

Upvotes: 0

Jonathon Faust
Jonathon Faust

Reputation: 12545

You need to use charAt, not the array index notation on the bookNum variable in the checkDigit method. Strings are not arrays.

Upvotes: 1

Related Questions