Тема: Помилка з оператором
Добрий день я робив кодер і декодер Хеммінга і в рядку 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
Для відправлення відповіді ви повинні увійти або зареєструватися