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

Java metody i tablice

Hosting forpsi easy 1 pln
0 głosów
1,108 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,200 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,550 wizyt
pytanie zadane 26 stycznia 2019 w C# przez boniek Nowicjusz (190 p.)
–1 głos
0 odpowiedzi 287 wizyt
pytanie zadane 16 lipca 2020 w Java przez T100 Obywatel (1,450 p.)
+1 głos
2 odpowiedzi 1,525 wizyt
pytanie zadane 29 czerwca 2018 w Java przez niezalogowany

92,087 zapytań

140,746 odpowiedzi

317,709 komentarzy

61,408 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia w koszyku, uzyskując rabat aż -50% (jeszcze tylko dziś 30.11 z okazji Black Week, a potem będzie to 30%) na bilety w wersji "Standard"! Więcej informacji na temat akademii znajdziecie tutaj. Dziękujemy Sekurakowi za tak fajną zniżkę dla 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 15% 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!

...