1

Тема: Помилка з оператором

Добрий день я робив кодер і декодер Хеммінга і в  рядку edata[j]=!edata[j]; показує помилку з оператором "!". Підскажіть в чому може бути помилка.

2 Востаннє редагувалося koala (09.04.2015 18:57:26)

Re: Помилка з оператором

Помилка може бути в коді. Ваш К.О.
Тип того edata і текст помилки ми телепатично маємо побачити, чи що?
Ну і уточніть, що саме, на вашу думку, тут має відбуватися.

Подякували: Regen1

3 Востаннє редагувалося Oleshko (09.04.2015 20:32:51)

Re: Помилка з оператором

Вот код:

public class HemmingCoder {


 public static void main(String[] args) {
    int data[]=new int[5];
int encoded[]=new int[8];
int edata[]=new int[7];
int syndrome[]=new int[3];
int[][] hmatrix = {
    {1,0,0,0,1,1,1,},
    {0,1,0,1,0,1,1,},
    { 0,0,1,1,1,0,1},
                    };
char[][] gmatrix={
    {0,1,1,1,0,0,0},
    {1,0,1,0,1,0,0},
    {1,1,0,0,0,1,0},
    {1,1,1,0,0,0,1}
        
};
 
Scanner sc = new Scanner(System.in);
    int 1,j;
   
      System.out.println("Кодер");
     System.out.println("Enter 4 bit data : ");
    for(1=0;1<4;1++)
     data[1]=sc.nextInt();
       
     //System.out.println("Generator matrix");
   // for(1=0;1<4;1++)
    //     System.out.println(gmatrix[1]);
     System.out.println("Encoded data ");
    for(1=0;1<7;1++)
    {
        for(j=0;j<4;j++)
            encoded[1]+=((data[j]-'0')*(gmatrix[j][1]-'0'));
        encoded[1]=encoded[1]%2;
        System.out.println(encoded[1]);
    }

 
     System.out.println("Декодер");
     System.out.println("Enter encoded bits as recieved : ");
    for(1=0;1<7;1++)
        
       edata[1]=sc.nextInt(); 
        
    for(1=0;1<3;1++)
    {
        for(j=0;j<7;j++)
        syndrome[1]+=(edata[j]*hmatrix[1][j]);
        syndrome[1]=syndrome[1]%2;
    }
    for(j=0;j<7;j++)
    if((syndrome[0]==hmatrix[0][j]) && (syndrome[1]==hmatrix[1][j])&& (syndrome[2]==hmatrix[2][j]))
    break;
    if(j==7)
         System.out.println("Error free");
    else
    {
        System.out.println("Error recieved at bit number" +j+1+" of data");
        edata[j]=!edata[j];
        System.out.println("Correct data should be : ");
        for(1=0;1<7;1++)
            System.out.println(edata[1]);
    }
    
 
 
 
 } 

  Замість 1 має бути і. Повідомлення не хотіло відправлятися.

4

Re: Помилка з оператором

Вибачте не помітив, крім випадку "System.out.println("Error recieved at bit number" +j+1+" of data");", тут має бути 1, а не і.

5

Re: Помилка з оператором

Для коду тут є тег [соdе](знак <> над полем допису).
Ви так і не сказали, яка помилка, але boolean і int в Java - несумісні типи, до int не можна застосовувати булівські оператори. На відміну від C++.

6

Re: Помилка з оператором

помилка в 63 рядку показує повідомлення:"bad operand type int for unary operator '!'". Я подивився в інтернеті там перед "edata[j]=!edata[j];" ставлять boolean, я попробував але дальше не получається. Підскажіть як можна це зробити.

7

Re: Помилка з оператором

Ніяк, звісно. boolean приймає тільки 2 значення - true і false. А у вас edata[j] має тип int. Тому оператор ! до edata[j] застосовувати не можна, про що я вже писав.

8

Re: Помилка з оператором

Вот запара, я переробив в декодері знаходить помилку але не міняє число на 1 на 0 і навпаки

public class HemmingCoder {


 public static void main(String[] args) {
    int data[]=new int[5];
int encoded[]=new int[8];
boolean edata[]=new boolean[7];
int eedata[]=new int[7];
int syndrome[]=new int[3];
int[][] hmatrix = {
    {1,0,0,0,1,1,1,},
    {0,1,0,1,0,1,1,},
    { 0,0,1,1,1,0,1},
                    };
int[][] gmatrix={
    {0,1,1,1,0,0,0},
    {1,0,1,0,1,0,0},
    {1,1,0,0,0,1,0},
    {1,1,1,0,0,0,1}
        
};
 
Scanner sc = new Scanner(System.in);
    int i,j;
   
      System.out.println("Кодер");
     System.out.println("Enter 4 bit data : ");
    for(i=0;i<4;i++)
     data[i]=sc.nextInt();
       
     //System.out.println("\nGenerator matrix\n");
   // for(i=0;i<4;i++)
    //     System.out.println(gmatrix[i]);
     System.out.println("Encoded data ");
    for(i=0;i<7;i++)
    {
        for(j=0;j<4;j++)
            encoded[i]+=((data[j]-'0')*(gmatrix[j][i]-'0'));
        encoded[i]=encoded[i]%2;
        System.out.println(encoded[i]);
    }

 
     System.out.println("Декодер");
     System.out.println("Enter encoded bits as recieved : ");
    for(i=0;i<7;i++)
        
       eedata[i]=sc.nextInt(); 
        
    for(i=0;i<3;i++)
    {
        for(j=0;j<7;j++)
        syndrome[i]+=(eedata[j]*hmatrix[i][j]);
        syndrome[i]=syndrome[i]%2;
    }
    for(j=0;j<7;j++)
    if((syndrome[0]==hmatrix[0][j]) && (syndrome[1]==hmatrix[1][j])&& (syndrome[2]==hmatrix[2][j]))
    break;
    if(j==7)
         System.out.println("Error free");
    else
    {
        System.out.println("Error recieved at bit number " +(j+1)+" of data");
        edata[j]=!edata[j];
        System.out.println("Correct data should be : ");
        for(i=0;i<7;i++)
            System.out.println(eedata[i]);
    }
    
 }
 
}

9

Re: Помилка з оператором

я додатковий масив створив int eedata[]=new int[7]; і через нього не міняється число, а з масивом типу boolen замість чисел пише True or False.

Подякували: koala1

10

Re: Помилка з оператором

Oleshko написав:

я додатковий масив створив int eedata[]=new int[7]; і через нього не міняється число, а з масивом типу boolen замість чисел пише True or False.

Ну і чудово.

11

Re: Помилка з оператором

Для побітовой інверсії числа є інший оператор. В плюсах це "~"

Подякували: Oleshko1

12

Re: Помилка з оператором

yarko написав:

Для побітовой інверсії числа є інший оператор. В плюсах це "~"

Я думав це порадити, але ж йому тут не просто побітовий оператор потрібен, а 0001 на 0000 і навпаки перетворювати. Або маску додавати, або хай краще сам пише так, як розуміє, а то потім не здасть.

13

Re: Помилка з оператором

А маска це коли додати ще одну бітову послідовність і за допомогою побітового "і", "або" порівняти два числа?

14

Re: Помилка з оператором

Так, якщо я вас правильно зрозумів
x & 0x01 //накладаємо на x маску 0x01 - "вимикаємо" всі біти, крім останнього.

15

Re: Помилка з оператором

Так, але там помилка може виникнути не тільки в останньому біті, а в будь-якому.

16

Re: Помилка з оператором

*WALL*

17

Re: Помилка з оператором

:D  :D  :D Я вже то зробив на сі давно) але хочеться і на Java зрозуміти.