• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java metody i tablice

Object Storage Arubacloud
0 głosów
1,202 wizyt
pytanie zadane 3 marca 2017 w Java przez moofi Początkujący (470 p.)

Siedze nad tym kodem od wielu godzin i nic, chce podzielic ten kod na 3 metody. Pierwsza to "input a name" druga to: " input a balance" ostatnia liczy "new balance dla kazdego".  Prawdopodobnie jest to bardzo proste ale nie wiem jak operowac tablicami w metodach. Moze jakis pomysl...

 

package Project;

import java.util.Scanner;

/**
 * Created by Pawel on 03/03/2017.
 */
public class SaverBonus {



    public static void main(String[] args)
    {

        Scanner input = new Scanner(System.in);
        String[] name = new String[4];
        int count;
        double percent = 0.2;
        double bonus;
        float[] balance = new float[4];
        double sum;


        for (count = 0; count < 4; count++)
        {
            System.out.print("Input a name " + (count + 1)+": ");
            name[count] = input.next();

            System.out.print("Input a balance for " + (name[count])+": ");
            balance[count] = input.nextFloat();

        }




        for (count = 0; count <= 3; count++)
        {
            bonus = (balance[count] * percent);
            sum = (balance[count] + bonus);
            // Rounding to 2 decimal places:
            sum *=100;
            sum = Math.round(sum);
            sum /=100;
            System.out.println("New balance for " + name[count] + " is: " + sum);
        }
    }


}

1 odpowiedź

+1 głos
odpowiedź 3 marca 2017 przez tangarr Mędrzec (154,780 p.)

Możesz utworzyć nową klasę w której umieścisz te metody, albo możesz dodać statyczne metody do klasy ServerBonus i wykonać je w funkcji main. Pamiętaj, żeby zmienić wspólne zmienne na statyczne zmienne klasy.

Przykład:
 

class MojaKlasa {
    private static int tajnaLiczba = 7;
    public static void main(String[] args) {
        pokazLiczbe();
    }
    private static void pokazLiczbe() {        
        System.out.println("tajna liczba to "+tajnaLiczba);
    }
}

 

komentarz 3 marca 2017 przez moofi Początkujący (470 p.)

Zrobilem cos takiego ale po wprowadzeniu danych wywala blad : ArrayIndexOutBoundsException: 4

package Project.Savers;

import java.util.Scanner;

/**
 * Created by Pawel on 3/3/2017.
 *
 */

public class Savers{


    public static void UsersA(String[] name){

        int count;

        for (count = 0; count < 4; count++)
        {   Scanner input = new Scanner(System.in);
            System.out.print("Input a name " + (count + 1)+": ");
            name[count] = input.next();
        }}



    public static float BalanceA(Float[] q){
        int count;
        for (count = 0; count < 4; count++)
        {   Scanner input = new Scanner(System.in);
            System.out.print("Input a balance for " + ": ");
            q[count] = input.nextFloat();

        }
        return q[count];
    }



    public static void main(String[] args)
    {


        String[] a = new String[4];
        int count;
        double percent = 0.2;
        double bonus;
        Float[] balance = new Float[4];
        Float[] balanceS = new Float[4];
        double sum;


        UsersA(a);
        balanceS = BalanceA(balance);


        for (count = 0; count <= 3; count++)
        {
            bonus = (balance[count] * percent);
            sum = (balance[count] + bonus);
            // Rounding to 2 decimal places:
            sum *=100;
            sum = Math.round(sum);
            sum /=100;
            System.out.println("New balance for " + a[count] + " is: " + sum);
        }
    }


}

 

komentarz 4 marca 2017 przez Javowiec Pasjonat (21,560 p.)

Nie wiem co chcesz osiągnąć, ale od razu widać, że wspomniany Exception dostajesz przy:
 

public static float BalanceA(Float[] q){
        int count;
        for (count = 0; count < 4; count++)
        {   Scanner input = new Scanner(System.in);
            System.out.print("Input a balance for " + ": ");
            q[count] = input.nextFloat();

        }
        return q[count];
    }

return q[count] będzie miało wartość w tym miejscu q[4], co jest poza przedziałem tabeli (length == 4, czyli maksymalny indeks to 3 - tablice indeksowane są od 0).

Po każdym zakończeniu przebiegu pętli jest wykonywana inkrementacja count++, czyli przy ostatnim przebiegu pętli, gdy count == 3 zachodzi inkrementacja do 4, sprawdzany jest warunek count < 4 (czyli 4 < 4 == fałsz) i pętla dalej się nie wykonuje.

komentarz 4 marca 2017 przez Javowiec Pasjonat (21,560 p.)

BTW, nie wyrzuca Ci czasem kompilator błędu w linijce:

balanceS = BalanceA(balance);

?

Przecież typy są niezgodne, zwracasz typ float i próbujesz go przypisać do tablicy typu Float[].

komentarz 7 marca 2017 przez PsyLisek Użytkownik (570 p.)
Czy przypadkiem w tym miejscu nie działa automatyczne opakowywanie typów? Przecież Java nie ma problemu z przypisaniem float do Float, tak samo jak z int to Integer itd.
komentarz 7 marca 2017 przez Javowiec Pasjonat (21,560 p.)
Ale Float[] to tablica... Przestudiuj jeszcze raz kod.
komentarz 7 marca 2017 przez Javowiec Pasjonat (21,560 p.)

Jakby było:

balanceS[0] = BalanceA(balance);

to wtedy by zadziałało opakowywanie.

Podobne pytania

0 głosów
2 odpowiedzi 3,862 wizyt
pytanie zadane 26 stycznia 2019 w C# przez boniek Nowicjusz (190 p.)
–1 głos
0 odpowiedzi 301 wizyt
pytanie zadane 16 lipca 2020 w Java przez T100 Obywatel (1,450 p.)
+1 głos
2 odpowiedzi 1,639 wizyt
pytanie zadane 29 czerwca 2018 w Java przez niezalogowany

92,536 zapytań

141,377 odpowiedzi

319,455 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...