Cálculo de dias restantes

Opa, fala galera!!
Sou iniciante, e estou tentando implementar esse código…
Na pesquisa que fiz verifiquei que existe o métodos Date que faz isso de forma mais prática, porém
o exercício pede que seja feita declarando essas 3 variáveis conforme abaixo:

Escrever um método que receba como parâmetros três inteiros:
• dia
• mês
• ano.
Com base nestes valores, o método deve retornar o número de dias que restam para terminar o ano. Se algum parâmetro for inválido, o método deve lançar uma exceção não verificada.

O código está funcionando, porém gostaria de saber se existe uma forma mais prática
de implementar o código para o cálculo dos meses que tem 31 dias sem ter que listar
todos ai na condição do if.
Meu próximo passo será encaixar os blocos try catch.

Esse foi o código que fiz até agora:

import javax.swing.JOptionPane;

public class CalculaDias {
public static void main(String[] args) {
// Declarando e inicializando as variáveis

	int dia = 0;
	int mes = 0;
	int ano = 0;
	
	
	dia = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe o dia:"));
	mes = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe o mês:"));
	ano = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe o ano:"));
	
	int TdiasAno = 365;
	int TdiasPassados = 0;
	int DifDias = 0;
	



	if (dia > 0 && dia < 32) {
		TdiasPassados += dia;
	} else {
		System.out.println("Dia " + dia + " Inválido");
	}

	if (mes > 0 && mes < 13) {			
		 if(mes == 2) { 
		 TdiasPassados += 28; 
		 } else { 
			 if (mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes ==  10 || mes == 12) {
				TdiasPassados += 1;
			} else {
			}
		 TdiasPassados += (mes - 1) * 30;
		 }
		
			
	} else {
		System.out.println("Mês " + mes + " Inválido");
	}
	
	if (ano > 0) {
	     // se o ano for maior que 400
        if(ano % 400 == 0){
           TdiasAno += 1;
        // se o ano for menor que 400
        } else if((ano % 4 == 0) && (ano % 100 != 0)){
        	TdiasAno += 1;
        } else{
            
		}
	} 
	
	DifDias = TdiasAno - TdiasPassados;
	
	System.out.println("Dias Passados " + TdiasPassados);
	System.out.println("Restam " + DifDias + " Para Terminar o ano " + ano);
}

}

Desde já agradeço a ajuda.

Melhorei o código, agora o cálculo do número de dias está com erro de lógica.
Alguém tem alguma idéia para melhorar?

Grato

import javax.swing.JOptionPane;

public class CalculoDias2 {

public static void main(String[] args) {

	try {
		// variáveis para armazenar dia, mês e ano
		int dia = 0;
		int mes = 0;
		int ano = 0;

		int TdiasAno = 365;
		int TdiasPassados = 0;
		int DifDias = 0;

		dia = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe o dia:"));
		mes = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe o mês:"));
		ano = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe o ano:"));

		// Ve

		boolean bissexto = false;

		// datas consideradas inválidas são datas cujo ano seja menor que 1 ou maior que
		// 2999
		// ou que o mês seja menor que 1 ou maior que 12, ou dia menor que 1 ou maior
		// que 31

		if (ano < 1 || ano > 2999 || mes < 1 || mes > 12 || dia < 1 || dia > 31) {
			System.out.println("Data inválida");

		} else if ((dia <= 31) && (mes <= 12)) {
			// se o mês for 2 e o dia maior que 28, a data é inválida. Ou então se o dia for
			// 31
			// e o mês for um dos meses que tem 30 dias, a data também é inválida
			if (((dia > 28) && (mes == 2))
					|| ((dia == 31) && ((mes == 4) || (mes == 6) || (mes == 9) || (mes == 11)))) {
				System.out.println("Data inválida");
			} else {
				// Código para quado a data for válida
				// Verificando se o ano é bissexto

				if (ano % 4 == 0) {
					bissexto = true;
				}
				if (ano % 100 == 0) {
					bissexto = false;
				}
				if (ano % 400 == 0) {
					bissexto = true;
				}

				if (bissexto == true) {
					TdiasAno += 1;
				}

				// Contagem dos dias

			}


		} else {
			System.out.println("Data inválida");
		}

		// Contagem dos dias

		TdiasPassados += dia + ((mes - 1) * 30);
		DifDias = TdiasAno - TdiasPassados;
		System.out.println("Faltam " + DifDias);

		System.out.println("Bissexto= " + bissexto);
		System.out.println("Dias Passados " + TdiasPassados);
		System.out.println("Dia= " + dia + " Mês= " + mes + " Ano= " + ano);
		System.out.println("Total de dias do ano: " + TdiasAno);

	} catch (NumberFormatException e) {
		System.out.println(e.getMessage());
	}

}

}

Acho que não há a necessidade desses dois ifs:
if (ano % 100 == 0) {
bissexto = false;
}
if (ano % 400 == 0) {
bissexto = true;
}
Pode ser esse o motivo de estar quebrando sua lógica, pq acredito que pode um ano ser bisexto sem deixar de ser divisível por 100 tendo resto zero
e %400 vai ser o mesmo q %4 pois 400%4 tbm é 0(zero)

e esse ii :
if (bissexto == true) {
TdiasAno += 1;
}

poderia ser simplesmente assim:

			if (bissexto) {
				TdiasAno += 1;
			}