First of all i am in the process of building an error correcting code program

The program is far from finished but it runs to a certain extent.

The problem i am having is i think to do with the modulus or % operator.

I quote below from my specification that if the value 8899880747 is entered as the 10 digit codeword. Then variables P, Q and R should equal 10, 7 & 10 respectively.

i.e. (from spec.) :

"P = (7*7-2*3) mod 11 = 43 mod 11 = 10

Q = (2*3-7*3) mod 11 = -15 mod 11 = -4 mod 11 = 7

R = (3*3-7*3) mod 11 = - 12 mod 11 = -1 mod 11 = 10"

now if you run my program, i have just ran a small test to see if my variables are bieng calculated properly. By just printing out the values of P, Q and R.

I am actually getting 10, -4, and -1 respectively for P, Q and R . This is kind of strange as if you look above at the quoted spec Q and R are actually -4 and -1, then the modulus is carried out to get 7 & 10.

Why are calculations giving -4 and -1 instead of 7 and 10?

Here is my program so far. It is far from finished but i cant really move on until all my variables are bieng calculated properly.

Code:`public static void main(String[] args) {`

int d1, d2, d3, d4, d5, d6, d7, d8, d9, d10; // the 10 digits from user input

int s1, s2, s3, s4; // if all = 0 then there are no errors

int s1Squared, s2Squared, s3Squared, s4Squared;

int P, Q, R; // if all = 0, then there is a single error

int qSquared; // the Product of Q * Q

int a, b; // the magnitude of the errors

int i, j; // the positions of the errors

String input; // the 10 digits input by the user

Scanner scan = new Scanner(System.in);

System.out.println("Enter a potential 10 digit codeword: ");

input = scan.nextLine();

d1 = Integer.parseInt(String.valueOf(input.charAt(0)));

d2 = Integer.parseInt(String.valueOf(input.charAt(1)));

d3 = Integer.parseInt(String.valueOf(input.charAt(2)));

d4 = Integer.parseInt(String.valueOf(input.charAt(3)));

d5 = Integer.parseInt(String.valueOf(input.charAt(4)));

d6 = Integer.parseInt(String.valueOf(input.charAt(5)));

d7 = Integer.parseInt(String.valueOf(input.charAt(6)));

d8 = Integer.parseInt(String.valueOf(input.charAt(7)));

d9 = Integer.parseInt(String.valueOf(input.charAt(8)));

d10 = Integer.parseInt(String.valueOf(input.charAt(9)));

s1 = (d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8 + d9 + d10) % 11;

s2 = (d1 + 2 * d2 + 3 * d3 + 4 * d4 + 5 * d5 + 6 * d6 + 7 * d7 + 8 * d8 + 9 * d9 + 10 * d10) % 11;

s3 = (d1 + 4 * d2 + 9 * d3 + 5 * d4 + 3 * d5 + 3 * d6 + 5 * d7 + 9 * d8 + 4 * d9 + d10) % 11;

s4 = (d1 + 8 * d2 + 5 * d3 + 9 * d4 + 4 * d5 + 7 * d6 + 2 * d7 + 6 * d8 + 3 * d9 + 10 * d10) % 11;

s1Squared = (int) Math.pow(s1, 2);

s2Squared = (int) Math.pow(s2, 2);

s3Squared = (int) Math.pow(s3, 2);

s4Squared = (int) Math.pow(s4, 2);

P = (s2Squared - (s1 * s3)) % 11;

Q = ((s1 * s4) - (s2 * s3)) % 11;

R = ((s3Squared) - (s2 * s4)) % 11;

qSquared = (int) Math.pow(Q, 2);

i = (int) ((Math.sqrt(qSquared - 4 * P * R) - Q) / (2 * P)) % 11;

j = (int) (-Q - (Math.sqrt(qSquared - 4 * P * R)) / (2 * P)) % 11;

b = ((i * s1 - s2) / (i - j)) % 11;

a = s1 - b;

System.out.println(P);

System.out.println(Q);

System.out.println(R);

if (s1 == 0 && s2 == 0 && s3 == 0 && s4 == 0) {

System.out.println("There are no errors!");

}

if (P == 0 && Q == 0 && R == 0 && s1 != 0 && s2 != 0 && s3 != 0 && s4 != 0) {

System.out.println("There is 1 error");

}

}

}