AJUDA - Could not find or load main class - Não entendo coloquei o public static string void main e mesmo assim o programa não executa [SOLUCIONADO]

Não entendi o que o compliador disse ??? - Mesmo colocando o public static string void main ele diz que não localiza e não executa o programa Java, se alguém puder me ajudar com isso , estou colocando ai o codigo :

//Here is a simple Java program that implements some basic bank operations, such as account registration, 
//opening and closing accounts, checking account balances, making deposits and withdrawals, and generating account statements.
// This program uses object-oriented programming principles, such as encapsulation, inheritance, and polymorphism.



import java.util.Scanner;

// This is the superclass that defines the common characteristics of all bank accounts
class BankAccount {
    public static void main(String args[]) {
        private int accountNumber;
        private String accountHolder;
        private double balance;


        // This is the default constructor for the BankAccount class

    public BankAccount() {
            this.accountNumber = 0;
            this.accountHolder = "";
            this.balance = 0.0;
        }

        // This is the parameterized constructor for the BankAccount class
    public BankAccount( int accountNumber, String accountHolder,double balance){
            this.accountNumber = accountNumber;
            this.accountHolder = accountHolder;
            this.balance = balance;
        }

        // This method returns the account number
        public int getAccountNumber () {

            return this.accountNumber;
        }

        // This method sets the account number
        public void setAccountNumber ( int accountNumber){

            this.accountNumber = accountNumber;
        }

        // This method returns the account holder's name
        public String getAccountHolder () {

            return this.accountHolder;
        }

        // This method sets the account holder's name
        public void setAccountHolder (String accountHolder){

            this.accountHolder = accountHolder;
        }

        // This method returns the account balance
        public double getBalance () {
            return this.balance;
        }

        // This method sets the account balance
        public void setBalance ( double balance){
            this.balance = balance;
        }

        // This method allows the customer to deposit money into their account
        public void deposit ( double amount){
            this.balance += amount;
            System.out.println("Deposit successful. Current balance: " + this.balance);
        }

        // This method allows the customer to withdraw money from their account
        public void withdraw ( double amount){
            if (amount > this.balance) {
                System.out.println("Insufficient funds. Current balance: " + this.balance);
            } else {
                this.balance -= amount;
                System.out.println("Withdrawal successful. Current balance: " + this.balance);
            }
        }

        // This method generates an account statement for the customer
        public void generateStatement () {
            System.out.println("Account number: " + this.accountNumber);
            System.out.println("Account holder: " + this.accountHolder);
            System.out.println("Current balance: " + this.balance);
        }
    }

    // This is a subclass of the BankAccount class that represents a savings account
    class SavingsAccount extends BankAccount {
        // This is the default constructor for the SavingsAccount class
        public SavingsAccount() {

            super();
        }

        // This is the parameterized constructor for the SavingsAccount class
        public SavingsAccount(int accountNumber, String accountHolder, double balance) {
            super(accountNumber, accountHolder, balance);
        }
    }
}


Só achei estranho a classe BankAccount não ser public. E parece que vc está com alguns problemas no fechamento dos métodos com as chaves.

A assinatura do entrypoint não é assim!

Exemplo:

public static void main(String[] args) {
    // …
}

O end point no Codigo esta escrito correto ele não acha o main ?

Pode verficar !

Sim já coloquei esses chaves em situações que não deram certo ! Mas aonde ?

Pelo contrário, está errado, você está declarando diversas propriedades e métodos dentro do main, dessa forma seu código não vai compilar.

Dentro do main você só pode declarar variáveis locais, criar instâncias de objetos e fazer chamadas de métodos.

1 curtida

Além das variáveis criadas no lugar errado, parece faltar instanciar e usar a classe SavingsAccount no main.

Mas acho que o método main nem deveria estar em BankAccount, seria melhor criar outra classe, por exemplo BankAccountTest para criar e usar as contas.

1 curtida

Vou tentar fazer isso , invocar BankAccount com BankAccountTest !

A classe que dever ser usada é SavingsAccount, senão ela não teria sentido.

1 curtida

Boa vou tentar usar, jogar em um package e invocar BankAccount !

Fiz o que você disse é compilou , mas tive que isolar o extends porque usei package para invocar BankAccount não sei se esta certo mas compilou sem erro !

package co.SavingsAccount.bank;
public class SavingsAccount {
    public static void main(String[] args) {
     int accountNumber;
     String accountHolder;
     double balance;
        }
    }

Cortei esse parte do codigo ! E Criei a classe acima era isso ?

// This is a subclass of the BankAccount class that represents a savings account
    class SavingsAccount extends BankAccount {
        // This is the default constructor for the SavingsAccount class
        public SavingsAccount() {

            super();
        }

        // This is the parameterized constructor for the SavingsAccount class
        public SavingsAccount(int accountNumber, String accountHolder, double balance) {
            super(accountNumber, accountHolder, balance);
        }
    }
}

Não era isso e agora você tirou a parte da herança.

Dê uma olhada nessa parte da apostila de Java da Alura https://www.alura.com.br/apostila-java-orientacao-objetos/heranca-reescrita-e-polimorfismo pra entender melhor a idéia.

Ou de preferência leia a apostila desde o começo: https://www.alura.com.br/apostila-java-orientacao-objetos

Acho que entendi , veja como ficou !

package co.SavingsAccount.bank;
public class AccountBankTest {
    public static void main(String[] args) {

    SavingsAccount savigsaccount = new SavingsAccount();


        }


    }

Ele compilou e mantive o codigo abaixo habilitado ! Funcionou !

// This is a subclass of the BankAccount class that represents a savings account
    class SavingsAccount extends BankAccount {
        // This is the default constructor for the SavingsAccount class
        public SavingsAccount() {

            super();
        }

        // This is the parameterized constructor for the SavingsAccount class
        public SavingsAccount(int accountNumber, String accountHolder, double balance) {
            super(accountNumber, accountHolder, balance);
        }
    }
}


Uma coisa que queria perguntar é que o nome do pacote influencia em alguma coisa !

package co.SavingsAccount.bank;

Poderia ser qualquer nome no pacote ? Algo como !

package co.ExecutaAccount.bank;

Estou lendo a apostila !

O nome não importa, mas obviamente deve ser coerente, desde que esteja de acordo com a estrutura de diretórios do seu programa.

Pra entender melhor: https://www.alura.com.br/apostila-java-orientacao-objetos/pacotes-organizando-suas-classes-e-bibliotecas.

1 curtida