Exercicio Caleum

Galera , fazendo os exercícios da caleum eu me deparei com isso

Escreva um programa que, dada uma variável x (com valor 180, por exemplo), temos y de acordo
com a seguinte regra:
se x é par, y = x / 2
se x é impar, y = 3 * x + 1
imprime y
O programa deve então jogar o valor de y em x e continuar até que y tenha o valor final de 1. Por
exemplo, para x = 13, a saída será:
40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1

bom eu sou iniciante em java , montei o seguinte código

[code]class teste2 {

public static void main (String[] args){

int x = 180;
int y;
if (x % 2) {
y = x % 2;
}
else {
y = 3 * x + 1;
}
while (y = 1){
System.out.println(y);
}
}
}

[/code]

na hora de compilar recebi

teste2.java:7: incompatible types
found : int
required: boolean
if (x % 2) {
^
teste2.java:13: incompatible type
found : int
required: boolean
while (y = 1){

como eu poderia arrumar o código ?

No seu if deve existir a comparação “se o resto da divisão de x por 2 for zero, então”. O que você tem no seu código é apenas o resultado do resto da divisão. Ou seja, é necessário uma comparação que diga true ou false (boolean), mas você diz para ele um número (int nesse caso). O código correto seria:

if (x % 2 == 0) {
y = x / 2;
}

else {
y = 3 * x + 1; 
}

x%2 vai te devolver um valor. A condição dentro do if espera um boolean (true ou false)

x%2 retorna um int
x%2 == 0 retorna um boolean

Espero ter ajudado.