http://pl.spoj.com/problems/KC004/
I moje pytanie brzmi jak zadeklarować tablice o teoretycznie nieskończonej pojemności ?
I jak zakończyć działąnie programy by sedzia na SPOJu mi to zaliczył ?
Pozdrawiam.
http://pl.spoj.com/problems/KC004/
I moje pytanie brzmi jak zadeklarować tablice o teoretycznie nieskończonej pojemności ?
I jak zakończyć działąnie programy by sedzia na SPOJu mi to zaliczył ?
Pozdrawiam.
Przy deklarowaniu tablicy trzeba obowiązkowo podać jej rozmiar.
Zamiast tablic użyj którejś klasy rozszerzającej List
, np. ArrayList
.
Kompletna dokumentacja:
https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
Podstawy, które musisz wiedzieć: (żeby było łatwiej)
ArrayList list = new ArrayList();
list.add(obj1); //obj1 na pozycji 0
list.add(obj2); //obj2 na pozycji 1
Object a = list.get(0); //zwraca obj1
Object b = list.get(1); //zwraca obj2
EDIT:
Możesz ustalić też typ przechowywany w liście:
ArrayList<String> list = new ArrayList<>();
list.add("foo");
list.add("bar");
String a = list.get(0);
String b = list.get(1);
Typ może być dowolny: klasy, tablice, nawet inne listy (nie ma problemu, żebyś zrobił takiego potworka, jak np. ArrayList<ArrayList<Map<String, String>>>
)
W tym zadaniu podajesz "z palca" wielkość tablicy (drugi parametr na wejściu) więc nie ma potrzeby stosowania ArrayList i można to zrobić tylko na tablicach. Pisząc program najpierw piszesz instrukcję, która pobierze od ciebie liczbę szukaną, później rozmiar tablicy, a następnie za pomocą podanego rozmiaru stworzysz tablicę i uzupełniasz ją liczbami.
Pomysł przedmówcy jest również dobry.
Na samych tablicach się nie zrobi, bo podana na wejściu ilość określa jedynie rozmiar przeszukiwanego ciągu, ale ilość tych ciągów jest nieokreślona:
Na wejście programu podana zostanie pewna nieokreślona liczba zestawów danych. Każdy z zestawów składa się z trzech rozdzielonych spacjami części: poszukiwanej liczby całkowitej, długości przeszukiwanego ciągu oraz samego ciągu. Poszczególne liczby w ciągu zostały rozdzielone spacjami; zestawy odseparowano od siebie znakiem nowej linii.
Można ewentualnie pozbyć się ArrayList, jeżeli będziesz każdą linijkę od razu wyliczał, a nie najpierw wczytywał, a później robił. W sumie w takim wypadku to faktycznie zrobi się też bez list :]
Chyba faktycznie nie do końca zrozumiałem treść zadania za pierwszym razem :P
A jaki dać warunek an zakończenie pętli ?
//EDIT : Chodzi o to, że w jaki sposób dać do zrozumienia, że program ma coś wypisać ?
A w jaki sposób dajesz do zrozumienia programowi, że ma coś wypisać? Po prostu wypisz tekst tak jak wypisujesz na konsolę. Jak nie wiesz jak to poszukaj.
Chyba mnie nie rozumiesz.
W poleceniu jest podane, że nie wiadomo ile jest zestawów, czyli hipotetycznie może być ich nieskończenie wiele. I jak mam dać do zrozumienia programowi, że ten zestaw był ostatni ?
Bo ustawienie w pętli if'a, że po wciśnieciu/wpisaniu czegoś pętla się przerywa, ten sposób nie nie działa.
http://pl.spoj.com/problems/KC003/
Czy tak jak tutaj, jak to zrobić by zakończyć działanie programu a mimo to wypisał dane ?
Bo gdy wpisuje ( ja je wpisuje ) dane i zamykam program, to on nic nie wypisuje.
Opisano to tutaj http://213.192.104.217/phpBB3-spoj-pl-backup/viewtopic.php?f=10&t=1209&sid=c381a7b38d47fa043bf68b5fd21d0ca7, interesuje cię nieokreślona liczba testów.
sig napisał(a):
Opisano to tutaj http://213.192.104.217/phpBB3-spoj-pl-backup/viewtopic.php?f=10&t=1209&sid=c381a7b38d47fa043bf68b5fd21d0ca7, interesuje cię nieokreślona liczba testów.
Scanner scan = new Scanner(System.in);
double[] tab_a = new double [1000];
double[] tab_b = new double [1000];
double[] tab_c = new double [1000];
int i = 0;
while(scan.hasNext()){
tab_a[i] = scan.nextInt();
tab_b[i] = scan.nextInt();
tab_c[i] = scan.nextInt();
if (tab_a[i] <0 || tab_b[i] <0 || tab_c[i] <0){
System.out.println("0");
}
else if ((tab_a[i] + tab_b[i]) > tab_c[i] && (tab_c[i] + tab_b[i]) > tab_a[i] && (tab_a[i] + tab_c[i]) > tab_b[i]){
System.out.println("1");
}
}
Taka forma jest nieprawidłowa niestety. Więc dane muszą być najpierw podane a potem wypisywanie tych 1 i 0.
I moje pytanie brzmi jak przerwać pętle z hasNext ?
Wędka z biorącą rybą
Scanner scanner = new Scanner(System.in);
int x, y, z, w;
while(scanner.hasNext())
{
w = 0;
x = scanner.nextInt();
y = scanner.nextInt();
for(int i = 0; i < y; i++) {
z = scanner.nextInt();
if(x == z) {
...
}
}
System.out.println(...);
}
//EDIT : Dla przyszłych pokoleń
Wystarczy, że zaraz po wpisaniu 3 liczb, które określają boki trójkąta, program wyświetli czy można z tego stworzyć trójkąt. Pętla nie musi się kończyć.