jedna z metod zadania 2giego :(
jak usunąć element z tablicy i wyrzucić wyjatek jak nic nie znajdzie?
Kod: |
public void usun(int n) throws Exception { |
import java.util.Random;
public class Zbior {
private static int M_ROZ = 2000;
protected int[] zbior = new int[M_ROZ];
protected int roz;
public void dodaj(int n) throws Exception {
roz++;
if (roz > M_ROZ) {
throw new Exception("Przekroczono rozmiar tablicy");
} else {
zbior[roz] = n;
}
}
public void usun(int n) throws Exception {
boolean znaleziono = false;
for (int i = 0; i < roz; i++) {
if (zbior[i] == n) {
znaleziono = true;
roz--;
for (int j = i; j < roz; j++) {
zbior[j] = zbior[j + 1];
}
}
}
if (!znaleziono) throw new Exception("Nie znaleziono liczby " + n);
}
public int losuj() {
Random r = new Random();
int los = r.nextInt();
try { usun(los); } catch(Exception e) {} ;
return los;
}
public int pobierzSume() throws Exception {
int suma = 0, poprzednia = 0; // poprzednia suma
for (int i = 0; i < roz; i++) {
suma += zbior[i];
if (poprzednia > 0 && suma < poprzednia && zbior[i] > 0) {
throw new Exception("Przepełnienie w górę");
} else if (poprzednia < 0 && suma > poprzednia && zbior[i] < 0) {
throw new Exception("Przepełnienie w dół");
}
poprzednia = suma;
}
return suma;
}
public void iloraz_elem(int n) throws Exception {
if (n == 0) throw new Exception("Dzielenie przez zero jest niedozwolone");
for (int i = 0; i < roz; i++) {
zbior[i] = zbior[i] / n;
}
}
public boolean sprawdz(int n) {
for (int i = 0; i < roz; i++) {
if (zbior[i] == n) return true;
}
return false;
}
public int pobierz_rozmiar() {
return roz;
}
}
Kod:
Kod:
import junit.framework.TestCase;
|
………………………………………………………………………………….
public void usun(int n) throws Exception {
boolean znaleziono = false;
for (int i = 0; i < roz; i++) {
if (zbior[i] == n) {
znaleziono = true;
roz--;
for (int j = i; j < roz; j++) {
zbior[j] = zbior[j + 1];
}
}
}
if (!znaleziono) throw new Exception("Nie znaleziono liczby " + n);
.
}
…………………………………………………………………………………………..
public void usun(int n) throws Exception {
boolean znaleziono = false;
for (int i = 0; i < roz; i++) {
if (zbior[i] == n) {
znaleziono = true;
roz--;
for (int j = i; j < roz; j++) {
zbior[j] = zbior[j + 1];
}
}
}
if (!znaleziono) throw new Exception("Nie znaleziono liczby " + n);
}
Na początku wiadomo, że nie znaleźliśmy jeszcze liczby do usunięcia. Jeżeli znaleźliśmy liczbę to usuwamy ją poprzez nadpisanie kolejną, czyli:
Usuwamy 2 ze zbioru: 4, 3, 5, 2, 1, 4, 2, 5, 5, 6
Znajdujemy pierwszą 2 więc wszystkie elementy za nią przesuwamy do przodu:
4, 3, 5, 1, 4, 2, 5, 5, 6
Znajdujemy drugą 2 i robimy to samo.
4, 3, 5, 1, 4, 5, 5, 6
Za każdym razem zmniejszamy rozmiar.
………………………………………………………………………