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

Java metody i tablice

0 głosów
949 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 VIP (140,920 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,580 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,580 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,580 p.)
Ale Float[] to tablica... Przestudiuj jeszcze raz kod.
komentarz 7 marca 2017 przez Javowiec Pasjonat (21,580 p.)

Jakby było:

balanceS[0] = BalanceA(balance);

to wtedy by zadziałało opakowywanie.

Podobne pytania

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

89,693 zapytań

138,297 odpowiedzi

309,243 komentarzy

59,623 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...