Тема: Помилка з оператором
Добрий день я робив кодер і декодер Хеммінга і в рядку edata[j]=!edata[j]; показує помилку з оператором "!". Підскажіть в чому може бути помилка.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Java → Помилка з оператором
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Добрий день я робив кодер і декодер Хеммінга і в рядку edata[j]=!edata[j]; показує помилку з оператором "!". Підскажіть в чому може бути помилка.
Помилка може бути в коді. Ваш К.О.
Тип того edata і текст помилки ми телепатично маємо побачити, чи що?
Ну і уточніть, що саме, на вашу думку, тут має відбуватися.
Вот код:
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 має бути і. Повідомлення не хотіло відправлятися.
Вибачте не помітив, крім випадку "System.out.println("Error recieved at bit number" +j+1+" of data");", тут має бути 1, а не і.
Для коду тут є тег [соdе](знак <> над полем допису).
Ви так і не сказали, яка помилка, але boolean і int в Java - несумісні типи, до int не можна застосовувати булівські оператори. На відміну від C++.
помилка в 63 рядку показує повідомлення:"bad operand type int for unary operator '!'". Я подивився в інтернеті там перед "edata[j]=!edata[j];" ставлять boolean, я попробував але дальше не получається. Підскажіть як можна це зробити.
Ніяк, звісно. boolean приймає тільки 2 значення - true і false. А у вас edata[j] має тип int. Тому оператор ! до edata[j] застосовувати не можна, про що я вже писав.
Вот запара, я переробив в декодері знаходить помилку але не міняє число на 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]);
    }
    
 }
 
}я додатковий масив створив int eedata[]=new int[7]; і через нього не міняється число, а з масивом типу boolen замість чисел пише True or False.
я додатковий масив створив int eedata[]=new int[7]; і через нього не міняється число, а з масивом типу boolen замість чисел пише True or False.
Ну і чудово.
Для побітовой інверсії числа є інший оператор. В плюсах це "~"
Для побітовой інверсії числа є інший оператор. В плюсах це "~"
Я думав це порадити, але ж йому тут не просто побітовий оператор потрібен, а 0001 на 0000 і навпаки перетворювати. Або маску додавати, або хай краще сам пише так, як розуміє, а то потім не здасть.
А маска це коли додати ще одну бітову послідовність і за допомогою побітового "і", "або" порівняти два числа?
Так, якщо я вас правильно зрозумів
x & 0x01 //накладаємо на x маску 0x01 - "вимикаємо" всі біти, крім останнього.
Так, але там помилка може виникнути не тільки в останньому біті, а в будь-якому.
  
  
 Я вже то зробив на сі давно) але хочеться і на Java зрозуміти.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися