Nieokreślona liczba elementów

0

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.

0

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>>>)

0

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.

0

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 :]

0

Chyba faktycznie nie do końca zrozumiałem treść zadania za pierwszym razem :P

0

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ć ?

0

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.

0

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.

0
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 ?

0

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(...);
}
0

//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ć.

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