Błąd z dzieleniem przez 0

0

Witam, mam pewien problem. Chodzi o to że w konsoli co chwile cały czas wyrzuca mi błąd z dzieleniem przez 0 :
Exception in thread "main" java.lang.ArithmeticException: / by zero
Mimo tego że tablica jest zawsze uzupełniona oraz > 0, i nie wiem w jaki sposób mógłbym sobie z tym poradzić:

import java.util.*;

public class Main
{
    public static void main (String [] args)

            {
                Scanner in = new Scanner (System.in);
                int t = in.nextInt();
                
                for (int i = 0; i < t; i ++)
                {
                    int ppl = in.nextInt();
                    int box = in.nextInt();
                    int boxtobuy = 0;
                    int [] tab = new int [ppl];
                    int a = 0;
                    int cookies = 0;
                    
                    for ( int ii = 0; ii < ppl; ii ++)
                    {
                        tab[ii] = in.nextInt();
                    }

                    for ( int j = 0; j < ppl; j ++)
                    {
                        a = 24 / (tab[j] / 3600);
                        cookies += a;
                    }

                    boxtobuy =  cookies / box;
                    System.out.println(boxtobuy);

                }
                in.close();
            }
}

dodanie znacznika <code class="java"> - furious programming

0

Robisz dzielenia całkowite. int/int = int. Czy na pewno o to ci chodziło?

0

Chodziło mi o to żeby "odciąć" to wszystko co znajduje się po przecinku i aby została liczba całkowita, myślałem nad tym co napisałem czy to przypadkiem nie jest błędem i czy nie trzeba pierw int/int = double a później rzutowanie, chciałem to sprawdzić przy skompilowaniu ale wyskoczył zupełnie inny błąd niż się spodziewałem i nie wiem jak sobie z tym poradzić.

0

Chodzi mi generalnie o to że jak robisz

tab[j] / 3600

i tab[j] jest mniejsze od 3600 to wynikiem będzie 0, przez które potem wesoło dzielisz.

0

o.O fakt, tego to sie nie spodziewałem xD, da się to jakoś zrobić w jednej linijce? Czy muszę tworzyć kolejną zmienną double i przyporządkować jej tab[j] / 3600

0

Dziel na floatach, końcowy wynik sobie przekonwertuj na inta dopiero.

0

tab[j] / 3600.0?

0

Jeszcze takie pytanie, w jaki sposób zmniejszać czas wykonywania programu?? Zmiany z int na shorta coś dają? Jak nie to w jaki sposób mógłbym zmniejszyć czas wykonywania tego programu? W eclipse da się jakoś sprawdzić ile zajmuje wykonanie programu?

0

Dlaczego na takim poziomie Cię interesuje szybkość wykonywania programu?
Zmiana z inta na short raczej niewiele da. Do pomiaru wydajności programu poczytaj o: http://en.wikipedia.org/wiki/Profiling_(computer_programming)

0

Początkowo żeby oswoić się z podstawami,programowaniem obiektowym, używam zadań ze spoja ( coraz bardziej mnie to zaczyna denerwować) no i często wyskakuje komunikat "Przekroczono czas wykonywania" i chciałbym sie dowiedzieć co powinienem zmienić aby zaliczało :D

0

Wyrzucasz poprawnie wynik na wyjście?

0
Shakaz napisał(a):

Wyrzucasz poprawnie wynik na wyjście?

Tak

0

Zwykle to oznacza ze masz kijowy algorytm i tyle. Zauważ że na spoju zwykle trzeba jednak pomyśleć a nie klepać brute-force na pałe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1