Tokenizer - odwołanie się...

0

Witam!

kumpel podesłal mi zadanie z zakonczonego juz etapu jakiegos tam konkursu, cały mój problem polega na tym ze nie potrafie odwolac sie do tokenow które mi wyskakuja tak aby zakonczyc zadanie... Nie chce szukac rozwiazania całego zadania na google, poniewaz chce przyswoic jak najwiecej wiedzy...

oto tresc zadania:

Bajtazar jest stolarzem. Przed chwilą dostał zamówienie na s sosnowych stołów. W swoim warsztacie desek
sosnowych ma pod dostatkiem, jednak właśnie zabrakło mu śrub. Musi więc udać się do magazynu i przynieść
pudełka ze śrubami. Ile minimalnie pudełek musi zabrać, aby mieć dostatecznie dużo śrub do wykonania
stołów?
Wejście
W pierwszym wierszu standardowego wejścia znajdują się trzy liczby całkowite n, k oraz s (1 ¬ n, k, s ¬
1 000), pooddzielane pojedynczymi odstępami. Oznaczają one kolejno liczbę pudełek ze śrubami w magazynie
Bajtazara, liczbę śrub potrzebnych do zrobienia jednego stołu oraz liczbę stołów, które ma wykonać Bajtazar.
W drugim wierszu znajduje się n (niekoniecznie różnych) liczb całkowitych ai (1 ¬ ai ¬ 1 000), pooddzielanych
pojedynczymi odstępami, takich że ai to liczba śrub w i-tym pudełku w magazynie.
Wyjście
W pierwszym i jedynym wierszu standardowego wyjścia wypisz jedną liczbę całkowitą — minimalną liczbę
pudełek ze śrubami, które musi przynieść z magazynu Bajtazar, by móc wykonać s stołów. Można założyć, że
Bajtazar posiada w magazynie wystarczającą liczbę śrub do zmontowania wszystkich stołów.
Przykład
Dla danych wejściowych:
5 6 3
3 9 5 7 3
poprawnym wynikiem jest: 3
Wyjaśnienie do przykładu. Aby zmontować trzy stoły, z których każdy wymaga do skręcenia sześciu śrub,
Bajtazar musi przynieść z magazynu trzy pudełka śrub. Mogą to być te zawierające 3, 7 i 9 śrub lub te z 9, 5 i 7 śrubami.

nie wyskakuja mi zadne bledy, ale nie wiem jak odwolac sie do tokena pierwszego drugiego i nastepnego z kolei oraz podczas wypisywania tokenow, nie pokazuje mi pierwszego tokena... bede bardzo wdzieczny za pomoc (szukalem odpowiedzi na google i na forum - bezskutecznie)

oto kod programu:

import javax.swing.*;
import java.util.*;
public class stoly {
	
public static void main (String[] args)
{
	int a,b,c,d,e;
	boolean s;
	String lol;
	
		do
		{
		lol = JOptionPane.showInputDialog(null, "podaj liczbe pudełek w piwincy(nie wieksza niz 1000 i nie mniejszqa niz 1)");
		a=Integer.parseInt(lol);
		s=a>=1&&a<=1000;
		}
		while (s==false);
		do{
		lol = JOptionPane.showInputDialog(null, "podaj liczbe srub do jednego stołu(nie wieksza niz 1000 i nie mniejszqa niz 1)");
		b=Integer.parseInt(lol);
		s=b>=1&&b<=1000;
		}
		while (s==false);
		do{
		lol = JOptionPane.showInputDialog(null, "podaj liczbe stołów do wykonania(nie wieksza niz 1000 i nie mniejszqa niz 1)");	
		c=Integer.parseInt(lol);
		s=c>=1&&c<=1000;
		}
		while (s==false);
		
	
	JOptionPane.showMessageDialog(null, "liczba pudełek w piwincy to: "+a);
	JOptionPane.showMessageDialog(null, "liczba srub do jednego stołu to: "+b);
	JOptionPane.showMessageDialog(null, "liczba stołów do wykonania to: "+c);
	d=a*b; //liczba śrub potrzebna do wykonania stołów
	
	lol = JOptionPane.showInputDialog(null, "podaj po spacji liczbe srub w pudle");
	StringTokenizer token = new StringTokenizer(lol);
	token.nextToken();
	int i = 0;
	while (token.hasMoreTokens()) 
	{
	            System.out.println(token.nextElement());
	            if(i == a) token.nextToken();
	            i++;
	}
}
}

czekam na rozpoczecie burzy mózgów... [browar]

0
        StringTokenizer token = new StringTokenizer(lol);
        token.nextToken(); // <-- tu gubisz pierwszy token
        int i = 0;
        while (token.hasMoreTokens())
        {
                    System.out.println(token.nextElement());
                    if(i == a) token.nextToken();
                    i++;
        }
0

ok, a czy jest jakis sposob na odwolanie sie do tokenu? tak zebym mogl potem zamienic string na Int??

0
int a=Integer.parseInt(token.nextToken());
0

Witam! Dalej kombinuje z tym samym programem... Tylko tym razem inna koncepcja - i pare błędów :-[

import java.io.*;
public class stoly2 {
	
int [] t=new int[1010];
BufferedReader a=new BufferedReader(new InputStreamReader(System.in));
String lol;

static void wczytaj (int n)
{	
	BufferedReader a=new BufferedReader(new InputStreamReader(System.in));
	String lol;
	int [] t=new int[1010];
	for (int i=0; i<n; i++)
	lol = a.readLine();
	t[i]=Integer.parseInt(lol);
}

 void wypisz (int n) 
{
	 for (int i=0; i<n; i++)
     System.out.println(t[i]);
}

public static void main (String[] args)throws IOException
{
	BufferedReader a=new BufferedReader(new InputStreamReader(System.in));
	String lol;
	int [] t=new int[1010];
	int n, k , s, p ,w;
	
	System.out.println("podaj n");
	lol = a.readLine();
	n=Integer.parseInt(lol);
	System.out.println("podaj k");
	lol = a.readLine();
	k=Integer.parseInt(lol);
	System.out.println("podaj s");
	lol = a.readLine();
	s=Integer.parseInt(lol);
	
	wczytaj(n);
	
	sort (t, t+n);
	w=0;
	p=k*s;
	for (int i=n-1; i>=0 && p>0; i--) 
	{
		p-=t[i];
		w++;
	}
	System.out.println(w);

}
}

błedy to:

"i cannot be resolved" przy:

t[i]=Integer.parseInt(lol);

oraz: "The operator + is undefined for the argument type(s) int[], int" dla:

sort (t, t+n);

PS.
Olbrzymi szacun dla użytkownika "bogdans" - rządzisz [browar]

0
        for (int i=0; i<n; i++)
        lol = a.readLine();
        t[i]=Integer.parseInt(lol);

prawdopodobnie brakuje nawiasów klamrowych

        for (int i=0; i<n; i++)
        {
            lol = a.readLine();
            t[i]=Integer.parseInt(lol);
        }
  1. przetłumaczyć Ci na polski? operator + jest niedozwolony jesli jeden z argumentów jest typu int, a drugi typu int[], znasz język w którym wolno tak dodawać?</b>
0
taki_jeden napisał(a)
  1. przetłumaczyć Ci na polski? operator + jest niedozwolony jesli jeden z argumentów jest typu int, a drugi typu int[], znasz język w którym wolno tak dodawać?</b>

Taki język to C/C++.

W Javie piszemy:
-dla tablic: Arrays.sort(tablica)
-dla kolekcji: Collections.sort(kolekcja)

0

wielkie dzieki Panowie!!

taki_jeden napisał(a)

znasz język w którym wolno tak dodawać?

tak, wczesniej troche pisalem w C++ :P

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