Sfide programimi Java – I/O

Per programatoret java po sjellim nje ushtrim shume interesant dhe ne te njejten kohe nje sfide ne zgjidhjen e tij. Mua personalisht me mori rreth 40 minuta shume te kendshme. Problemi dhe zgjidhja eshte kompleks dhe kerkon intuite ne programim.

Ja ushtrimi:

/*
http://albanianwizard.org
arditi*at*hush*pik*ai
Liçence GPLv3
———————————————————–
Program i nje niveli relativisht te veshtire per temat I\O
Llogjika e ketij programi eshte goxha e komplikuar 😉
———————————————————–
>>Shkruaj nje program i cili lexon N (numer i pa percaktuar) grupe numrash te plote nga nje skedar ku fillim i secilit grupi shenohet me “grupi”.
>>Programi mund te perdori ç’faredo numri grupesh (pra numri i grupeve nuk eshte i limituar).
>>Programi mund te perdori vetem klasat java.util.Scanner; java.io (objektet qe permbajn Scanner new File, .next(), .trim() etj) dhe gjat zhvillimit te tij lejohet vetem while, if, else !
***********************************************************
Ja faili input
***********************************************************
grupi
2 1 6 3 1 4
grupi
grupi
1 19 1 5 2 4 1 2 1
grupi
10 11
12 13
7   8
9
***********************************************************
Ja dhe outputi

***********************************************************
Shuma e grupit 1, eshte e barabarte me 17
Grupi i 2-te nuk ka te dhena.
Shuma e grupit 3, eshte e barabarte me 36
Shuma e grupit 4, eshte e barabarte me 70
*/

Per c’do sqarim postoni ketu por besoj se nga vet shembulli ne fjale Input – Output e keni kuputar se per cfare ben fjale ushtrimi dhe si eshte kerkesa.

Pritet zgjidhja e tij deri ne 1 jave qe nga data e postimit (dmth sot).
Mbas 1 jave do te postoj vet zgjidhjen.
Programinuk me mori shume rreshta kod, thjesht duhet te mendohet mire zgjidhja. :)
Happy coding.

Si te programojm ne Java – Shembull Input \ Output

http://albanianwizard.org/Postokodin/53
/*
http://albanianwizard.org
arditi*at*hush*pik*ai
Liçence GPLv3
——————————-
USHTRIM
——————————-
Shkruaj nje program i cili analizon nje txt file dhe numrat pozitiv i depoziton
ne nje file pozitive.txt, kurse ato negativet i depoziton ne nje file negative.txt
Pyete perdoruesin per ç’do emer faili.
*/

import java.util.*;
import java.io.*;
public class FiltroNumrat {
public static void main (String []args ) throws IOException
{
//Percaktojm Variabilat\\
int numri;
String origjina, destpozitiv, destnegativ;
//Krijoj Objektin per emrat e faileve\\
Scanner inPuti = new Scanner (System.in);

//Marrim te dhenat nga faili origjinar
System.out.println(“Emri i Failit Origjinar :”);
origjina = inPuti.nextLine().trim();
File origjinaf = new File (origjina);
Scanner ori = new Scanner (origjinaf);

//Marrim te dhenat nga faili i destinacionit te numrave pozitiv
System.out.println (“Emri i Failit ku do te depozitohen numrat pozitiv :”);
destpozitiv = inPuti.nextLine().trim();
File destinapoz = new File (destpozitiv);

//Marrim te dhenat nga faili i destinacionit te numrave negativ
System.out.println (“Emri i Failit ku do te depozitohen numrat negativ :”);
destnegativ = inPuti.nextLine().trim();
File destinaneg = new File (destnegativ);

//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
//Krijojm objektet per te printuar tek failet e futura nga perdoruesi
PrintStream psp = new PrintStream(destinapoz);  //Pozitiv
PrintStream psn = new PrintStream (destinaneg);   //Negativ
numri = ori.nextInt(); //numri merr vleren e pare qe vjen nga faili origjinar
while (ori.hasNextInt()) //Nderkohe qe nga faili origjinar vijn numra te plote…
{
while (numri >= 0) //dhe ky numer eshte >= 0
{
psp.println(“Numri pozitiv eshte :” + numri); //printo numrin pozitiv tek faili
System.out.println(“Numri pozitiv eshte :” + numri); //printo numrin pozitive ne ekran
numri = ori.nextInt();//Jepi variabiles numri vleren e radhes qe vjen nga faili origjinar
/*Nese kjo nuk behet atehere programi do te printoj vazhdimisht numrin e pare dhe keshtu
do te kaloj ne infinit */
}
while (numri <= 0)
{
psn.println(“Numri negativ eshte :” + numri);//printo numrin negativ tek faili
System.out.println(“Numri negativ eshte :” + numri);//printo numrin negativ ne ekran
numri = ori.nextInt();//Jepi variabiles numri vleren e radhes qe vjen nga faili origjinar
}
}
psp.close();
psn.close();
/*Kjo pjese eshte pjesa qe me ka marre shume kohe sepse ndodh qe te behet nje gabim banal dhe te
* vendoset mbyllja e printimit ne brendesi te ciklit while gje qe do te sillte qe ne failet
* e outputit pozitive.txt dhe negative.txt do te gjenim vetem nje numer , numrin e fundit.. Kjo
* sepse sa here qe do printohej nje numer faili do te mbyllej dhe kur te printohej tjetri do te rihapej
* gje qe do te sillte ate qe tham me siper.. Ky Bug ka kete pamje:
* while (numri <= 0)
{
psn.println(“Numri negativ eshte :” + numri);
System.out.println(“Numri negativ eshte :” + numri);
numri = ori.nextInt();
psn.close();
}
* Pra siç e shohim psn.close(); do te mbyllte printimin ne ç’do cikel while.
*/
}
}