Problem z przekazywaniem parametrow

0

Hej,

Stawiam pierwsze kroki w Jave i staram sie napisac prosty program, ktory pokazuje balance na koncie jednego uzytkownika, dane .
Mam menu glowne w ktorym jest 6 wyborow.

1) opcja ma skladac depozyt...
problem jest ze moja globalna zmienna nie przechowuje wartosci...nie wiem jak to ugryzc..

Opis problemu:
kiedy wybieram opcje jeden Depozyt, dodaje np 300 to program wyswietli ile dodalem i wroci do menu glownego.
Kiedy ponownie wybieram zloz depozyt to suma 300 z jakiegos powodu nie jest zapamietana. I np dodajac znow 200 , balance na koncie jest tylko 200, a nie 500 :(

Ktos pomoze albo nakieruje co robie zle:

Oto kod:

package gasaccount;
import java.util.Scanner;

public class GasAccount {

* declaring variables*
 private int intAccRefNo; 
 private String strNam,strAddres;
 private double dblBalance,dblUnits,dblUnitcost,cashin;

/**
 * @param args the command line arguments
 */

public static void main(String[] args) {

   MainMenu(); * calling main MENU *

}

static void MainMenu() section call to display main menu
{
menuMethod();
};

* DISPLAYING MENU *
*this portion of code displays main menu*

static void menuMethod ()
{

     System.out.println(" <MENU>  \n");
     System.out.println(" 1 - Make a deposit ");
     System.out.println(" 2 - Record meter reading ");
     System.out.println(" 3 - Display balance");
     System.out.println(" 4 - Account details ");
     System.out.println(" 5 - Help ");
     System.out.println(" 6 - Exit ");
     System.out.println(" \n ");

GasAccount NewAccount = new GasAccount();

Scanner in = new Scanner (System.in);
switch ( in.nextInt() )

{
case 1: NewAccount.Deposit();
break;
case 2: NewAccount.recordUnits();
break;
case 3: NewAccount.getBalance();
break;
case 4: NewAccount.displayAccountDetails();
break;
case 5: NewAccount.helpManual();
break;
case 6: NewAccount.exitProgram();
break;
default: System.err.println ( "Unrecognized option" );
break; }
} // END OF THE MAIN MENU SECTION

  • MAKE A DEPOSIT SECTION version 1*
    public void Deposit()
    {

    Scanner input = new Scanner (System.in);
    System.out.println("How much would like to deposit ?");
    cashin=input.nextInt();
    dblBalance=dblBalance+cashin;
    System.out.println("Your new balance is: "+dblBalance + "£");
    System.out.println(" \n ");
    MainMenu();// return to main menu

    } END OF THE MAKE A DEPOSIT SECTION

Gdzie popelniam blad ?

Z gory dziekuje za kazda porade.

0

Cały ten kod to jeden wielki błąd.

  1. Masz tu ewidentny stack overflow bo cały czas rekurencyjnie wołasz sobie MainMenu i kiedyś program się położy
  2. To mi wygląda na kod pisany przez kogoś kto próbuje pisać w Javie tak jak w C...
  3. Obiekt Account tworzysz sobie LOKALNIE w funkcji i wywołując ją drugi raz tworzysz NOWY OBIEKT. Tego pierwszego NIGDZIE nie zapamiętujesz to i nie dziwota że za każdym razem saldo konta jest zerowane.
0

Na mój gust program jest napisany idiotycznie, nie będę więc proponował poprawek. Przyczyna opisywanego zachowania tkwi w tym:

static void menuMethod ()
     {

         System.out.println(" <MENU>  \n");
         System.out.println(" 1 - Make a deposit ");
         System.out.println(" 2 - Record meter reading ");
         System.out.println(" 3 - Display balance");
         System.out.println(" 4 - Account details ");
         System.out.println(" 5 - Help ");
         System.out.println(" 6 - Exit ");
         System.out.println(" \n ");

   GasAccount NewAccount = new GasAccount(); //TU!!!!!

Za każdym razem tworzysz nowy obiekt, i pracujesz na zmiennych nowego obiektu.

0

Rozumiem.

Czy moglby ktos z Was wskazac mi przyklad prostego programu.

Menu z wyborem np.
1) wplac depozyt
2) wyplac pieniadze

Jak by to mialo wygladac ?

Bardzo bym prosil o jakis przyklad, bo juz mi sie to wszystko pomieszalo.

jakis prosty przyklad na pewno wieli by mi naswietlil.

Z gory dziekuje.

0

Nieładnie koledzy: tak żeście zbesztali pytającego że jeszcze mu ochota do nauki przejdzie. Może kod faktycznie jest pisany jakby java była językiem proceduralnym jak C ale jednak pytajacy zrobił o wiele więcej (napisał kompletny kod) niż większosć noobów piszących w tym dziale forum, a takich zjebek nie dostali.

0

:) Bardziej bym powiedzial zagrzeje mnie do walki.
Tak to prawda. Pisalem duzo kiedys w Atari basic, Visual Basic :D ... stad taki nawyk... od niedawna zaczlem sie bawic Java i jestem totalnym leszczem.

Mam problem przekazywaniem parametrow. Czytam rozne kursy ale nadal nie rozumiem prostoty ich dzialania.

Np. Jak przekazac wartosc liczbowa pomiedzy pewnymi porcjami kodu.

Na pewno jakis prosty przyklad typu:

kalkulacja 1+1 w jednej czesci i przekazanie jej wyniku do wyswietlenia w innej czesci programu.

lub wygenerowanie losowej liczby w jednej czesci i przekazanie jej do drugiej .

w Atari Basic to bylo proste bo pisales GOTO ....numer lini potem RETURN i juz ...

Szukam jakiegos opisu:

Proste menu:

1) WPLAC
2) WYPLAC
3) POKAZ STAN KONTA
4) WYJSCIE

po wyborze opcji 1-3 chcialbym aby program powracal do MENU wyboru.

Prosty program uzmyslowi mi jak to dziala.
Ja po prostu mam tak ze ucze sie na konkretnych przykladach.
Teoria opisowac malo mi z reguly mowi.

Z gory dziekuje za wszelka pomoc.

0
import java.util.Scanner;

public class GasAccount {

     private int intAccRefNo;
     private String strNam,strAddres;
     private double dblBalance,dblUnits,dblUnitcost,cashin;

    /**
     * @param args the command line arguments
     */

    public static void main(String[] args) {
       GasAccount newAccount = new GasAccount();
       while(true)
       {
           newAccount.displayMenu();
       }
    }

    private void displayMenu()
    {
        System.out.println(" <MENU>  \n");
        System.out.println(" 1 - Make a deposit ");
        System.out.println(" 2 - Record meter reading ");
        System.out.println(" 3 - Display balance");
        System.out.println(" 4 - Account details ");
        System.out.println(" 5 - Help ");
        System.out.println(" 6 - Exit ");
        System.out.println(" \n "); 
        Scanner in = new Scanner (System.in);
        int choice=7;
        try
        {
            choice=in.nextInt();
        }
        catch(Exception e)
        {
        }
        switch (choice)         
        {    
            case 1:          
              deposit();
              break;      
            case 2:         
              //NewAccount.recordUnits();
              break;  
            case 3:         
              //NewAccount.getBalance();
              break;  
            case 4:         
              //NewAccount.displayAccountDetails();
              break;  
            case 5:         
              //NewAccount.helpManual();
              break;
            case 6:         
              System.exit(0);
            default:        
              System.err.println ( "Unrecognized option" );    
              break;    
        }
     }

    private void deposit()
    {
        Scanner input = new Scanner (System.in);
        System.out.println("How much would like to deposit ?");
        try
        {
            cashin=input.nextInt();
        }
        catch(Exception e)
        {
            cashin=0;
        }
        dblBalance=dblBalance+cashin;
        System.out.println("Your new balance is: "+dblBalance + " L");
        System.out.println(" \n ");
     }
 }

Dodałem obsługę błędów, użytkownicy nie zawsze grzecznie wpisują liczby.

0

Bardzo dziekuje za pomoc. Dzis po szkole to przetestuje sobie.

Mam tylko jedno pytanie czy ten public void main moze byc zmieniony do private ?

pozdrawiam

0

Nie. Metoda main musi być public static void i jako argument przyjmować tablicę stringów.
Jak inaczej chciałbyś się do niej odwołać skoro do składników prywatnych masz dostęp tylko z "wewnątrz klasy". Jakbyś zrobił z niej private to nie miałbyś punktu dostępowego ;]

0

Dyskutowalem z jakims gosciem na jakims czacie przy omawianiu tego kodu sobie i napisal mi m.w cos takiego ...moze zle to zrozumialem : "Your object code should note have a public static void main method in it." ...ale nie wiem o co mu dokladnie chodzilo... Moze za bardzo wnikam po prostu i sie czepiam ...pomyslalem tylko, ze jezeli jest to private to wlasnie powinno tak jakos byc..

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0