Just nu i M3-nätverket
Gå till innehåll

Hur ändrar jag så att jag får de 10 senaste transaktionerna?


canDen

Rekommendera Poster

Hej!

 

Jag har skrivit en kod som ska skriva ut de senaste 10 transaktionerna, men mitt program skriver enbart ut 9 st. Om jag ändrar längden "transaction.length -1", till "transaction.length" utan minustecken, får jag felmeddelande "arrayoutofbounds..." när jag har tryckt in 11 olika transaktioner. Hur ska jag göra? Har för tillfället slut på ideer.  själva arrayen ska ha 10 element så det är ingen ide att ändra arrayens storlek till 11.

 

import java.util.Scanner;
 
 
public class Atm 
{
 
    public static void main(String[] args)
    {
         Scanner keyboard = new Scanner(System.in);
 
         int amount = 0;
         int choice = 0;
         int [] transactions = new int[10];
         int sum;
         int balance = 0;
 
         while (choice != 4)
         {
          choice = menu();
          switch(choice)
          {
          case 1:
          System.out.print("Vilken summa vill du sŠtta in? :");
          sum = keyboard.nextInt();
          if(sum == 0)
          {
          System.out.print("Du har angett ett felaktigt belopp.");
          System.out.println();
          System.out.println();
          }
          else
          {
          amount = (int) + sum;
          makeTransactions(amount, transactions);
          }
          break;
 
          case 2:
          System.out.print("Vilken summa vill du ta ut?: ");
          sum = keyboard.nextInt();
          if(sum == 0)
          {
          System.out.print("Du har angett ett felaktigt belopp.");
          System.out.println();
          System.out.println();
          }
          else
          {
          amount = (int) - sum;
          makeTransactions(amount, transactions);
          }
          break;
 
          case 3:
          showTransactions(transactions, balance);
          break;
 
          case 4:
          System.out.println("du valde att avsluta ");
          break;
          }
 
         }
    }
 
 
    public static int menu()
    {
    Scanner keyboard = new Scanner(System.in);
    int choice = 0;
 
    System.out.println("Enkel bankomat ");
    System.out.println();
    System.out.println("1. Insättning");
    System.out.println("2. Uttag ");
    System.out.println("3. Saldobesked ");
    System.out.println("4. Avsluta ");
    System.out.println();
    System.out.println("Ditt val: ");
 
    choice = keyboard.nextInt();
    return choice;
    }
 
public static void showTransactions(int [] transactions, int balance)
{
System.out.println();
System.out.println("Tidigare transaktioner :");
System.out.println();
 
for(int i = 0; i < transactions.length-1; i++)
{
if(transactions == 0)
{
System.out.print("");
}
 
else
{
System.out.print(transactions + "\n");
balance = balance + transactions;
 
}
 
}
System.out.println();
System.out.println("Saldo: " + balance + " kr" + "\n" );
System.out.println();
 
}
 
public static void makeTransactions(int amount, int [] transactions)
{
int position = findNr(transactions);
if(position == -1)
{
moveTrans(transactions);
position = findNr(transactions);
transactions[position] = amount;
}
else
{
transactions[position] = amount;
}
 
}
 
public static int findNr(int [] transactions)
{
int position = -1;
 
for(int i = 0; i < transactions.length-1; i++)
{
if(transactions == 0)
{
position = i;
break;
}
}
return position;
}
 
public static void moveTrans(int [] transactions)
{
for(int i = 0; i < transactions.length-1; i++)
 
transactions = transactions[i + 1] ;
 
}
 
 
}
Länk till kommentar
Dela på andra webbplatser

Det blir väl problem i moveTrans eftersom du där har "i+1" och i kan ha värdet 9.

Länk till kommentar
Dela på andra webbplatser

men behöver jag inte ha i+1 för att ge index 0 i transaction arrayen index 1. Jag ska ju flytta alla variabler i arrayen åt vänster. Så den senaste transaktionen ska ju ligga sist i arrayen, på index 9.

Länk till kommentar
Dela på andra webbplatser

den ska få det 10:e värdet som användaren skriver ut. När fler än 10 värden har skrivits in får index 9 det sist inskrivna värdet från användaren. 

Länk till kommentar
Dela på andra webbplatser

Just nu så blir det:

transactions[9] = transactions[10] ;

Tycker du att det är rätt?

Länk till kommentar
Dela på andra webbplatser

Blir det inte transaction [8] = transaction [9] eftersom i for-loopen står det transaction.length - 1.

 

Koden fungerar som den ska det enda e att jag får 9 transaktioner istället för 10. det är det jag har trixat med fram och tillbaka för att kunna lösa. 

Länk till kommentar
Dela på andra webbplatser

Okej, men hur långt kommer då denna sats i showTransactions?

 

for(int i = 0; i < transactions.length-1; i++)

 

Kommer den då att skriva ut transaction[9] ?

Länk till kommentar
Dela på andra webbplatser

Jag ändrade och tog bort minustecknet i  transaction.length, men jag får fortfarande bara upp 9 transaktioner. 

Länk till kommentar
Dela på andra webbplatser

Då är det kanske bäst att du kollar att du verkligen lagrar 10 värden, t ex med en testutskrift i makeTransactions innehållande position och värde varje gång en transaktion lagras.

Länk till kommentar
Dela på andra webbplatser

Jag lyckades fixa det!:)

 

Men så dök ett annat problem upp och det är att saldot blir inte rätt. Efter att 10 värden har skrivits in så raderas värdet från det första indexet. Enbart de 10 värdena som skrivs ut i showTransaction adderas till saldot. Men jag vill att alla saldon som har skrivits in ska adderas. Varför blir det så tokigt? 

Länk till kommentar
Dela på andra webbplatser

Vad bra! :thumbsup:

 

Tänk efter när balance beräknas och se om du kan komma på ett bättre ställe där alla transaktioner kommer med.

Länk till kommentar
Dela på andra webbplatser

jag la samma beräkning som jag har i showtransaction i main metoden men det fungerade inte som jag ville. några ideer hur jag kan tänka? jag förstår ju att de tidigare transaktionerna raderas och kommer ej med i beräkningen av saldot. 

Länk till kommentar
Dela på andra webbplatser

Vad tror du om att uppdatera balance så fort som du får in en transaktion?

Länk till kommentar
Dela på andra webbplatser

När uträkningen ligger i showTransactions blir det så eftersom showTransactions bara vet om 10 transaktioner.

 

Beräkna balance i makeTransactions i stället.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...