2013-08-13 11 views

Odpowiedz

31

Problemy z wieloma wątkami. Domyślnie fasola szparagowa to single.

+0

klasy publicznej Kalkulator { publicznych Int addTwoNumbers (int pierwszy int s) { Int wynik = pierwszego + sekund; wynik zwrotu; } } – user1933827

+0

tak, to będzie naprawić klasę – WeMakeSoftware

+2

Ale to nie będzie rozwiązać problem przepełnienia ... –

13

Integer overflow to kolejny problem, jeśli się to liczy.

Aby go rozwiązać, można powrócić long zamiast:

long result; 
public long addTwoNumbers(int first, int second) 
{ 
    result = (long)first + second; 
    return result; 
} 

Uważaj tylko, że result = first + second;, jak dwa int „s zostaną dodane, dając int (co może przepełnić), co tylko będzie następnie przekonwertować na long.

result = (long)first + second; jest równoważna result = ((long)first) + second; (nie result = (long)(first + second);), co oznacza, możemy przekształcić jedną z int s Do long pierwszy, więc byłoby long + int, który daje long.

+0

Publiczny kalkulator klasy { public long addTwoNumbers (int first, int second) { długi wynik = pierwszy + drugi; wynik zwrotu; } } } – user1933827

+5

To będzie ten sam problem - zostaną dodane dwie wartości int, dając int (które może przepełnić), które zostaną następnie zamienione na długie. Edytowane. – Dukeling

+0

Doskonale! Lubię to. +1 – Chiron

7

Ta klasa nie jest bezpieczna dla wątków, zakładając, że jest to sprężynowa pojedyncza fasola. Jeśli dwa wątki dodadzą numery, istnieje szansa, że ​​pierwszy wątek otrzyma wynik obliczenia drugiego wątku, więc możemy uzyskać 2 + 2 = 5. Jeśli pole wynikowe nie powinno być używane nigdzie indziej, powinno się go pozbyć

public class Calculator { 
     public int addTwoNumbers(int first, int second) { 
     return first + second; 
    } 
} 
Powiązane problemy