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

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

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] ;
 
}
 
 
}

Dela detta inlägg


Länk till inlägg
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.

Dela detta inlägg


Länk till inlägg
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. 

Dela detta inlägg


Länk till inlägg
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. 

Dela detta inlägg


Länk till inlägg
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] ?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

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

Dela detta inlägg


Länk till inlägg
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.

Dela detta inlägg


Länk till inlägg
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? 

Dela detta inlägg


Länk till inlägg
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. 

Dela detta inlägg


Länk till inlägg
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.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...