接收错误:尝试查找数组元素的其余部分时,二进制运算符'%'的操作数类型错误

问题描述

我正在为作业编写脚本,如下所示:

((Huge Integer Class)创建一个类HugeInteger,该类使用 i元素的40元素数组,用于存储最大40位的整数 每。提供解析,toString,加法和减法的方法方法解析 应该收到一个字符串,使用charat和方法提取每个数字 将每个数字的等效整数放入整数数组。对于 比较HugeInteger对象,提供以下方法: isEqualTo,isNotEqualTo,isGreaterThan,isLessthan, isGreaterThanorEqualTo和isLessthanorEqualTo。这些都是一个 如果关系之间存在关系,则返回true的谓词方法 两个HugeInteger对象,如果关系确实返回false 不举行。提供谓词方法isZero。

我想出了这段代码

import java.util.Scanner;

// Here is the  H U G E  integer class
public class HugeInteger {
    int[] digits;
    boolean checkvalidity;
    HugeInteger(String str){
    // Split it into 40 parts across an array
        parse(str);
    }
    HugeInteger(char[] array){
        this(new String(array));
    }
    HugeInteger(int length){
        digits = new int[length];
    }
    int size(){
        return digits.length;
    }
    
    void parse(String str){
        digits = new int[str.length()];
        for (int i = 0; i<str.length(); i++)
            digits[i]=str.charat(i) - '0';
    }
    
    public String makeString(){
        String str = "";
        int i;
        for(i = size() -1; i >=0; i--){
            if (digits[i] != 0)
                break;
        }
        System.out.println();
        for(int j = i; j>=0; j--){
            str = digits[j] + str;
        }
        return str;
    }
    //isEqualTo
    public boolean isEqualTo(HugeInteger X){
        if (this.checkvalidity || X.checkvalidity){
            return false;
        }
        for (int i = 0; i < this.size(); i++)
            if (this.digits[i] != X.digits[i])
                return false;
        return true;
    }
    //isNotEqualTo
    public boolean isNotEqualTo(HugeInteger X){
        return !checkvalidity && !X.checkvalidity && !this.isEqualTo(X);
    }
    //isGreaterThan
    public boolean isGreaterThan(HugeInteger X){
        return !checkvalidity && !X.checkvalidity && !this.isLessthan(X);
    }
    //isLessthan
    public boolean isLessthan(HugeInteger X){
        for (int i = size() - 1; i>=0; i--){
            if (digits[i] < X.digits[i])
                return true;
            if (digits[i] > X.digits[i])
                return false;
        }
        return false;
    }
    //isGreaterThanorEqualTo
     public boolean isGreaterThanorEqualTo(HugeInteger X){
         return !checkvalidity && !X.checkvalidity && this.isLessthan(X);
    }
    //isLessthanorEqualTo
     public boolean isLessthanorEqualTo(HugeInteger X){
         return !checkvalidity && !X.checkvalidity && this.isGreaterThan(X);
    }
    //isZero
    public boolean isZero(){
        HugeInteger z = new HugeInteger ("0");
        if ((z.toString()).equals(this.toString()))
            return true;
        else
            return false;
    }
    //checklength
    void checklength(int length){
        length += 1;
        if(size() >= length)
            return;
        int[] x = new int[length];
        int k = length;
        for(int i = size() -1; i >= 0; i--)
            x[--k] = digits[i];
        digits = x;
    }
    public HugeInteger add(HugeInteger X){
        int length = size();
        if(X.size() > length)
            length = X.size();
        checklength(length);
        X.checklength(length);
        HugeInteger result = new HugeInteger(length + 1);
        int carry = 0;
        for (int i = length; i>=0; i--){
            result.digits[i]= digits[i] + X.digits[i] + carry;
            if (result.digits[i] < 10){
                carry = 0;
            }
            else{
                carry = result.digits[i] % 10;
                result.digits %= 10;
            }
        }
        return result;
    }
    public HugeInteger subtract(HugeInteger X){
        int borrow = 0;
        HugeInteger result = new HugeInteger(this.size());
        if (checkvalidity || X.checkvalidity || this.isLessthan(X)){
            System.out.println("Negative integers are not supported.");
            checkvalidity = true;
            return this;
        }
        for (int i = 0; i < X.size(); i++){
            result.digits[i] = this.digits[i] - X.digits[i] + borrow;
            if (result.digits[i] >= 0)
                borrow = 0;
            else{
                result.digits[i] += 10;
                borrow = 1;
            }
        }
        return result;
    }   

    // Oh lawd here comes the main
    public static void main(String[] args) {
        //I used a RNG 40 times on google for this number. 
        HugeInteger x = new HugeInteger("3860212152246790390766126144795673312670");
        HugeInteger y = new HugeInteger("7728093673730608095378478497442287097340");
        //Established zero value,only used 10 digits.
        HugeInteger z = new HugeInteger("0000000000");
        if(x.isEqualTo(y))
            System.out.println(x + " Is Equal To " + y);
        if(x.isLessthan(y))
            System.out.println(x + " Is less Than " + y);
        if(x.isNotEqualTo(y))
            System.out.println(x + " Is Not Equal To " + y);
        if(x.isGreaterThan(y))
            System.out.println(x + " Is Greater Than " + y);
        if(x.isGreaterThanorEqualTo(y))
            System.out.println(x + " Is Greater Than Or Equal To " + y);
        if(x.isLessthanorEqualTo(y))
            System.out.println(x + " Is Less Than Or Equal To " + y);
        if(z.isZero())
            System.out.println("z:" + z + " Is zero.");
        HugeInteger s = x.subtract(y);
        HugeInteger a = x.add(y);
        
        System.out.println("subtract: " + s);
        System.out.println("add: " + a);
        
    }
}

但是我收到此错误

HugeInteger.java:111: error: bad operand types for binary operator '%'
                                result.digits %= 10;
                                              ^
  first type:  int[]
  second type: int
1 error

我仍然是一个非常新的程序员,所以我猜测这是一个非常小的错误。我曾尝试研究此类错误的Stack Overflow,但没有任何反应。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)