Como posso melhorar meu programa? (JAVA)

Como posso melhor meu programa? Me indiquem funções, métodos, classes pra estudo!

package br;

import java.io.*;
import java.util.*;

class Login{

	File file = new File("//home//john//Documentos//Login.txt");
	
	public void cadastra_usuario(String usuario, String senha){
		
		
		if(verifica_login(usuario, senha) == true){
			System.out.println("Usuario ja existente");
			
		}else{
			
			try{
				
				FileWriter objeto_escritor = new FileWriter(file, true);
				PrintWriter escritor = new PrintWriter(objeto_escritor);
				
				escritor.println("Login: "+usuario);
				escritor.println("Senha: "+senha);
				escritor.println("");
				
				System.out.println("\nCADASTRO EFETUADO\n");
				
				objeto_escritor.close();
			}catch(Exception ex){
				System.out.println("Não foi possível escrever o arquivo");
			}
		}
	}
	
	public boolean verifica_login(String usuario, String senha){

		boolean confirmacao = false;

		try{
			
			if(!file.exists()){
				file.createNewFile();
			}

			FileReader objeto_leitor = new FileReader(file); 
			BufferedReader leitor = new BufferedReader(objeto_leitor);		

			String linha = leitor.readLine();

			while(linha != null){

				if(linha.contains(usuario)){
					linha = leitor.readLine();

					if(linha.contains(senha)){
						confirmacao = true;
					}
				}

				linha = leitor.readLine();
			}
				
			leitor.close();
			
		}catch(Exception ex){
			System.out.println("Não foi possível ler o arquivo");
		}

		return confirmacao;
	}

}

public class Verifica{

	public static void main(String[] args){
		
		Login login = new Login();
		
		Scanner in = new Scanner(System.in);
		
		int escolha = 0;
		
		do{
			
			System.out.println("Digite:\n1- LOGIN\n2- CADASTRO\n3- SAIR\n");
			escolha = in.nextInt();
			
			switch(escolha){
			
				case 1:
					System.out.println("-Login-\nDigite seu login: ");
					String usuario = in.next();

					System.out.println("\nDigite sua senha: ");
					String senha = in.next();

					if(login.verifica_login(usuario, senha) == true){
						System.out.println("\nLOGIN EFETUADO\n");
					}else{
						System.out.println("\nLOGIN NAO EFETUADO\n");
					}
					break;
					
				case 2:
					System.out.println("-Cadastro-\nDigite seu login: ");
					usuario = in.next();

					System.out.println("\nDigite sua senha: ");
					senha = in.next();
					
					login.cadastra_usuario(usuario, senha);
			}
			
		}while(escolha != 3);
		
		in.close();
	}
}
1 curtida

Tem muitas coisas que podem ser melhoradas, observe que vc mistura usuario e login onde está:

escritor.println("Login: "+usuario);

Recomendo mudar o nome da classe Login para uma outra, a função dessa classe é de verificar o acesso e cadastrar usuários/login, então um nome mais apropriado seria GerenciadorDeLogin, GerenciadorDeAcesso, GerenciadorDeUsuario ou PersistenciaDeUsuario. Recomendo que vc crie uma classe Login/Usuario que armazena o login e senha, se escolher Usuario:

class Usuario {
  private String login;
  private String senha;
  public void setLogin(String login) {
    this.login = login;
  }
  public String getLogin() {
    return this.login;
  }
  // o mesmo com a senha
}

Informação sobre set/get e JavaBean

Sobre o método cadastra_usuario deve ser alterado para:

public void cadastrarUsuario(Usuario usuario) {
  String login = usuario.getLogin();
  String senha = usuario.getSenha();
}

os métodos devem preferencialmente estarem com verbos no infinitivo e com separador com letra maiúscula e sem underline.

Observe a repetição:

System.out.println("...");
escolha = in.nextInt();

Crie um método e altere para:

public class Verifica{
  private static final Scanner in = new Scanner(System.in);
  public static String ler(String texto) {
    System.out.println(texto);
    return in.nextInt();
  }
2 curtidas

Obrigado pelas dicas! Vou estudar mais a fundo.

Caraca… quando eu penso q sei Java, aparece vcs… manja de Java pacas heim

1 curtida