Negação de um elemento do vetor

Boa tarde.

Vou precisar fazer uma tabela verdade, e uma parte do processo necessita da negação do valor do elemento de um vetor – só irei trabalhar com “zeros” e “ums” – , como a negação de 1 para que eu possa imprimir 0, posteriormente. No entanto, é apresentado um erro de compilação que aponta o operador unário “!” como um erro de sintaxe. Alguma sugestão de alteração?

Desde já, agradeço.

public class Teste {
public static void main(String[ ] args) {
int vet [ ] = {1, 0, 1, 0};
vet[0] = 1;
System.out.print(!(vet[0]));
}
}

Faz o if e imprime o que vc quiser

if(valor > 0){
   print
} else {
}
1 curtida

@joaostm tu tens que ter em mente que os operadores lógicos só podem ‘trabalhar’ com expressões ou operações lógicas. Com efeito, só se pode negar um valor lógico, ou seja, true ou false (no Java). No entanto, o seu vetor vet é um vetor de inteiros e não de valores booleanos. Para resolver isso, tens, conforme indicou o @rodriguesabner, que usar uma estrutura de seleção.
Exemplo:

public class Teste {
	public static void main(String[ ] args){
		int[] vet = {1, 0, 1, 0};
		
		for(short i = 0; i < vet.length; i++){
			if(vet[i] == 0)
				vet[i] = 1;
			else
				vet[i] = 0;
		
			System.out.print(" " + vet[i]);
		}
	}
} 

Resultado:

image

1 curtida

O operador ! é um NÃO LÓGICO, só funciona com valores boolean.

O operador de negação para tipos numéricos é o ~ entretanto ele inverte todos os bits de seu número.
Então um int de valor 1 vai virar -2, veja:

Os bits do int de valor 1:

00000000 00000000 00000000 00000001 --> equivale à 1 decimal
 byte 3   byte 2   byte 1   byte 0

Os bits do ~1:

11111111 11111111 11111111 11111110 --> equivale à -2 decimal
 byte 3   byte 2   byte 1   byte 0

Se você quer inverter entre 0 e 1 e vice-versa, você precisa fazer uma operação XOR do seu valor com 1.

Exemplo 1 XOR 1:

00000000 00000000 00000000 00000001 --> equivale à 1 decimal
                XOR
00000000 00000000 00000000 00000001 --> equivale à 1 decimal
-----------------------------------
00000000 00000000 00000000 00000000 --> equivale à 0 decimal
 byte 3   byte 2   byte 1   byte 0

Exemplo 0 XOR 1:

00000000 00000000 00000000 00000000 --> equivale à 0 decimal
                XOR
00000000 00000000 00000000 00000001 --> equivale à 1 decimal
-----------------------------------
00000000 00000000 00000000 00000001 --> equivale à 1 decimal
 byte 3   byte 2   byte 1   byte 0

Em Java o XOR é realizada através do operador ^.

Então basta você fazer assim:

int[] vet = { 1, 0, 1, 0 };
for (int valor : vet) {
    System.out.println(valor + " XOR 1 = " + (valor ^ 1));
}