Bom, eu estou a muito tempo tentando entender porque meu código esta dando errado, vamos ao codigo:
for (int i = 0; i < fim.length; i++) {
for (int j=0;j<fim[0].length;j++){
fim[i][j]= Character.getNumericValue(par[i][j]);
}
}
Fim = uma matriz de valores inteiros 4x4 ;
par = uma matriz de valores char 4x4.
No código estou tentando converter para inteiro os valores de par, e guardando em fim. O provável motivo do erro é que par vem de outra matriz char 3x3, eu precisava expandi-la, e adicionar novos valores, então criei uma maior, em seguida tentei converter os char para inteiro.
porem o valor das bordas inferior e direita vem tudo bugado, provavelmente por causa dessa diferença de 3x3 e 4x4, não sei se fui bem claro, mas aqui vai o código inteiro pra entender melhor:
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
char matriz [][] = new char [3][3];
char par [][] = new char [4][4];
int fim[][] = new int [4][4];
String bin;
System.out.println("digite uma sequencia de 9 digitos em binario: ");
bin=s.next();
//System.out.println(bin);
// converte o int em String e cria um array de chars com base na String
char[] digitos = String.valueOf( bin ).toCharArray();
// matriz com os dados
int cont = 0;
for(int i = 0;i< matriz.length;i++){
for(int j=0;j<matriz[0].length;j++){
matriz[i][j] = digitos [cont];
cont++;
}
}
// Só testando pra ver se a matriz ta saindo ok
//Esta ok
System.out.println("matriz: ");
for (int i = 0; i < matriz.length; i++) {
for (int j = 0; j < matriz.length; j++) {
System.out.print(matriz[i][j]);
}
System.out.println(" ");
}
// Transferindo bits para uma matriz maior
for(int i = 0;i< matriz.length;i++){
for(int j=0;j<matriz[0].length;j++){
par[i][j]=matriz[i][j];
}
}
//Só estanto pra ver se a par ta saindo ok
//Esta ok
System.out.println("Par: ");
for (int i = 0; i < par.length; i++) {
for (int j = 0; j < par.length; j++) {
System.out.print(par[i][j]);
}
System.out.println(" ");
}
//Conversão do vetor para inteiro
for (int i = 0; i < fim.length; i++) {
for (int j=0;j<fim[0].length;j++){
fim[i][j]= Character.getNumericValue(par[i][j]);
}
}
//Só estanto pra ver se a fim ta saindo ok
// ERROR
System.out.println("fim: ");
for (int i = 0; i < fim.length; i++) {
for (int j = 0; j < fim.length; j++) {
System.out.print(fim[i][j]);
}
System.out.println(" ");
}
// checar linhas
for(int i=0;i<2;i++){
// Adicionando bits de paridade
if(fim[i][0] + fim[i][1] + fim[i][2] == 0)
fim[i][3] = 1;
else if(fim[i][0] + fim[i][1] + fim[i][2] == 1)
fim[i][3] = 0;
else if(fim[i][0] + fim[i][1] + fim[i][2] == 2)
fim[i][3] = 1;
else if(fim[i][0] + fim[i][1] + fim[i][2] == 3)
fim[i][3] = 0;
}
// checar colunas
for(int j=0;j<2;j++){
// Adicionando bits de paridade
if(fim[0][j] + fim[1][j] + fim[2][j] == 0)
fim[j][3] = 1;
else if(fim[0][j] + fim[1][j] + fim[2][j] == 1)
fim[j][3] = 0;
else if(fim[0][j] + fim[1][j] + fim[2][j] == 2)
fim[j][3] = 1;
else if(fim[0][j] + fim[1][j] + fim[2][j] == 3)
fim[j][3] = 0;
}
System.out.println(imprimir(fim));
//Impressão com bits
//for(int i = 0;i< matriz.length;i++){
// for(int j=0;j<matriz[0].length;j++){
// System.out.print(par[i][j]);
// }
// System.out.println(" ");
// }
}
//Teste de paridade
public static String imprimir (int x[][]){
String saida = "";
System.out.println();
System.out.println("Com bits de paridade:\n");
for (int i = 0; i < x.length; i++) {
for (int j = 0; j < x[0].length; j++) {
saida = saida + x[i][j] ; //imprime caracter a caracter
}
saida = saida +"\n"; //muda de linha
}
return saida ;
}
Eu executei aqui seu código e os valores das bordas inferior e direita vem com um quadrado no console, isso significa que essas posições estão vazias. O que faz sentido porque você está percorrendo uma matriz 3x3 pra preencher uma matriz 4x4.
O que você queria que tivesse nos valores nas bordas inferior e direita?
Em “Conversão do vetor para inteiro” use fim[i][j] = par[i][j] - 48;
para converter para int
Seria o mesmo que: fim[i][j] = par[i][j] - '0';
E leva em consideração o que o @LuanFroehlich disse. Isso será um problema.
Deixe todos como matriz[3][3] .
for(int i=0;i<2;i++){
// Adicionando bits de paridade
if(fim[i][0] + fim[i][1] + fim[i][2] == 0)
fim[i][3] = 1;
else if(fim[i][0] + fim[i][1] + fim[i][2] == 1)
fim[i][3] = 0;
else if(fim[i][0] + fim[i][1] + fim[i][2] == 2)
fim[i][3] = 1;
else if(fim[i][0] + fim[i][1] + fim[i][2] == 3)
fim[i][3] = 0;
}
// checar colunas
for(int j=0;j<2;j++){
// Adicionando bits de paridade
if(fim[0][j] + fim[1][j] + fim[2][j] == 0)
fim[j][3] = 1;
else if(fim[0][j] + fim[1][j] + fim[2][j] == 1)
fim[j][3] = 0;
else if(fim[0][j] + fim[1][j] + fim[2][j] == 2)
fim[j][3] = 1;
else if(fim[0][j] + fim[1][j] + fim[2][j] == 3)
fim[j][3] = 0;
}
Aqui eu testei os bits da matriz, a intenção é sempre ficar um numero impar de bits 1 em cada linha e em cada coluna, então eu testo pra saber quantos tem, e adiciono 0 ou 1 na borda dependendo do resultado, exemplo:
111000111
111 0
000 1
111 0
111
Os bits que entraram é o que o código a cima devia fazer se estivesse tudo ok.
// checar linhas
for(int i=0;i<2;i++){
// Adicionando bits de paridade
switch (fim[i][0] + fim[i][1] + fim[i][2]) {
case 0:
fim[i][3] = 1;
break;
case 1:
fim[i][3] = 0;
break;
case 2:
fim[i][3] = 1;
break;
case 3:
fim[i][3] = 0;
break;
default:
break;
}
}
// checar colunas
for(int j=0;j<2;j++){
// Adicionando bits de paridade
switch (fim[0][j] + fim[1][j] + fim[2][j]) {
case 0:
fim[3][j] = 1;
break;
case 1:
fim[3][j] = 0;
break;
case 2:
fim[3][j] = 1;
break;
case 3:
fim[3][j] = 0;
break;
default:
break;
}
}
Tinha um erro besta, corrigi e coloquei em um switch pra ficar mais facil entender
Consegui aqui galera, era só uns erros bem besta mesmo que passaram despercebido, muito obrigado pela ajuda, segue o código:
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
char matriz [][] = new char [3][3];
char par [][] = new char [4][4];
int fim[][] = new int [4][4];
String bin;
System.out.println("digite uma sequencia de 9 digitos em binario: ");
bin=s.next();
//System.out.println(bin);
// converte o int em String e cria um array de chars com base na String
char[] digitos = String.valueOf( bin ).toCharArray();
// matriz com os dados
int cont = 0;
for(int i = 0;i< matriz.length;i++){
for(int j=0;j<matriz[0].length;j++){
matriz[i][j] = digitos [cont];
cont++;
}
}
// Só testando pra ver se a matriz ta saindo ok
//Esta ok
System.out.println("matriz: ");
for (int i = 0; i < matriz.length; i++) {
for (int j = 0; j < matriz.length; j++) {
System.out.print(matriz[i][j]);
}
System.out.println(" ");
}
// Transferindo bits para uma matriz maior
for(int i = 0;i< matriz.length;i++){
for(int j=0;j<matriz[0].length;j++){
par[i][j]=matriz[i][j];
}
}
//Só estanto pra ver se a par ta saindo ok
//Esta ok
System.out.println("Par: ");
for (int i = 0; i < par.length; i++) {
for (int j = 0; j < par.length; j++) {
System.out.print(par[i][j]);
}
System.out.println(" ");
}
//Conversão do vetor para inteiro
for (int i = 0; i < fim.length; i++) {
for (int j=0;j<fim[0].length;j++){
fim[i][j]= Character.getNumericValue(par[i][j]);
}
}
//Só estanto pra ver se a fim ta saindo ok
// ERROR
//Apenas par avizualização
System.out.println("fim: ");
for (int i = 0; i < fim.length; i++) {
for (int j = 0; j < fim.length; j++) {
System.out.print(fim[i][j]);
}
System.out.println(" ");
}
// checar linhas
for(int i=0;i<fim.length;i++){
// Adicionando bits de paridade
switch (fim[i][0] + fim[i][1] + fim[i][2]) {
case 0:
fim[i][3] = 1;
break;
case 1:
fim[i][3] = 0;
break;
case 2:
fim[i][3] = 1;
break;
case 3:
fim[i][3] = 0;
break;
default:
break;
}
}
// checar colunas
for(int j=0;j<fim.length;j++){
// Adicionando bits de paridade
switch (fim[0][j] + fim[1][j] + fim[2][j]) {
case 0:
fim[3][j] = 1;
break;
case 1:
fim[3][j] = 0;
break;
case 2:
fim[3][j] = 1;
break;
case 3:
fim[3][j] = 0;
break;
default:
break;
}
}
System.out.println(imprimir(fim));
//Impressão com bits
//for(int i = 0;i< matriz.length;i++){
// for(int j=0;j<matriz[0].length;j++){
// System.out.print(par[i][j]);
// }
// System.out.println(" ");
// }
}
//Teste de paridade
public static String imprimir (int x[][]){
String saida = "";
System.out.println();
System.out.println("Com bits de paridade:\n");
for (int i = 0; i < x.length; i++) {
for (int j = 0; j < x[0].length; j++) {
saida = saida + x[i][j] ; //imprime caracter a caracter
}
saida = saida +"\n"; //muda de linha
}
return saida ;
}