Java - Pomoć za rešavanje zadatka

Goblini

Početnik
Poruka
7
Poštovani,

Danas sam se registrovao na forumu jer sam video da je aktivan.

Molim za pomoć, već više od 10 dana se mučim da završim jedan zadatak i taman kada mislim da sam uspeo ponovo nađem problem.
Zaista se trudim da naučim sa razumevanjem ali posle 10 dana sam shvatio da sam totalno zaglavio u problem.

Stoga bih Vas molio ako možete da mi pregledate kod i da me ispravite tamo gde grešim... možda bi bilo najbolje ako neko može da mi prepravi kod pa da ja tačno vidim gde grešim jer mi više ništa nije jasno.

Zadatak je sledeći

Korišćenje naredbi za kontrolu toka u obradi niza

Dat je sledeći niz:

int[] array = {12, 23, -22, 0, 43, 545, -4, -55, 43, 12, 0, -999, -87}.

Potrebno je napraviti dva niza, jedan za smeštanje pozitivnih, a drugi za smeštanje negativnih elemenata niza array i potrebnu logiku koja će obaviti izvlačenje odgovarajućih elemenata u odgovarajući niz. Elemente jednake nuli ne treba ubacivati u rezultujuće nizove.

Drugim rečima, potrebno je iz niza array, koji je dat, izvući sve pozitivne elemente i smestiti u zaseban niz i izvući sve negativne elemente i smestiti u zaseban niz.

Takođe je potrebno odrediti i broj duplikata u nizu array. U tom slučaju, treba brojati i elemente koji su jednaki nuli. Pri tome, ne treba ispisivati koliko puta se ponavlja svaki element niza, već prebrojati i ispisati samo one elelemente koji se ponavljaju i koliko puta.

Naravno, potrebno je da napisana funkcionalnost bude primenljiva na bilo koji niz celobrojnih vrednosti, ne samo na ovaj konkretan primer.

Dakle da pojasnim, na outputu mora da imam posebno negativne brojeve, zatim posebno pozitivne brojeve ali da se ne ispisuju duplo i bez 0 (nula) i za kraj posebno da imam brojeve koji se pojavljuju vise puta.

Moj problem je što nikako ne mogu da izbacim nule i brojeve koji se ponavljaju iz pozitivnog niza.

Šaljem vam kopiju ekrana da vidite, sada više nemam ni te brojeve na izlazu. Pogubio sam se.

pomoc-krstarica.jpg


Radim u netbeans-u

Šaljem Vam kod koji sam do sada ispisao.

Unapred zahvalan na pomoći i objašnjenju

Kod:
package assignment;


import java.util.Arrays;

public class MyFirstAssignment {

    public static void main(String[] args) {

        int[] array = {12, 23, -22, 0, 43, 545, -4, -55, 43, 12, 0, -999, -87};
       
        Arrays.sort(array);
        
        int negativni = 0;
        int pozitivni = 0;
        
        for (int i = 0; i < array.length; i++) {
            if (array[i] < 0) {
                negativni++;
              
            }
        }
        pozitivni = array.length - negativni;
        negativni = array.length - pozitivni;
        
        int[] PozNiz = new int[pozitivni];
        int[] NegNiz = new int[negativni];

        int j = 0, k = 0;

        for (int i = 0; i < array.length; i++) {
            if (array[i] < 0) {
                NegNiz[j] = array[j];
            
            j++;
        }
            
        else {if (array[i] > 0)
            PozNiz[k] = array[i];
              k++;
              }
        }

        //System.out.println("array :" + Arrays.toString(array));
        
        System.out.println("Negativni Niz :" + Arrays.toString(NegNiz));
        System.out.println("Pozitivni Niz :" + Arrays.toString(PozNiz));

        for (int i = 0; i < array.length - 1; i++) 
            if (array[i + 1] == array[i]) {
                //Totalno sam se pogubio na izbacuje mi duple brojeve a nije izbacio ni nule
                //Zar treba da radim jos jednu petlju?
                System.out.println("Dupli brojevi :" + array[i]);
                i = i + 1;
            }
        }
    }
 
Poštovani,

Danas sam se registrovao na forumu jer sam video da je aktivan.

Molim za pomoć, već više od 10 dana se mučim da završim jedan zadatak i taman kada mislim da sam uspeo ponovo nađem problem.
Zaista se trudim da naučim sa razumevanjem ali posle 10 dana sam shvatio da sam totalno zaglavio u problem.

Stoga bih Vas molio ako možete da mi pregledate kod i da me ispravite tamo gde grešim... možda bi bilo najbolje ako neko može da mi prepravi kod pa da ja tačno vidim gde grešim jer mi više ništa nije jasno.

Zadatak je sledeći

Korišćenje naredbi za kontrolu toka u obradi niza

Dat je sledeći niz:

int[] array = {12, 23, -22, 0, 43, 545, -4, -55, 43, 12, 0, -999, -87}.

Potrebno je napraviti dva niza, jedan za smeštanje pozitivnih, a drugi za smeštanje negativnih elemenata niza array i potrebnu logiku koja će obaviti izvlačenje odgovarajućih elemenata u odgovarajući niz. Elemente jednake nuli ne treba ubacivati u rezultujuće nizove.

Drugim rečima, potrebno je iz niza array, koji je dat, izvući sve pozitivne elemente i smestiti u zaseban niz i izvući sve negativne elemente i smestiti u zaseban niz.

Takođe je potrebno odrediti i broj duplikata u nizu array. U tom slučaju, treba brojati i elemente koji su jednaki nuli. Pri tome, ne treba ispisivati koliko puta se ponavlja svaki element niza, već prebrojati i ispisati samo one elelemente koji se ponavljaju i koliko puta.

Naravno, potrebno je da napisana funkcionalnost bude primenljiva na bilo koji niz celobrojnih vrednosti, ne samo na ovaj konkretan primer.

Dakle da pojasnim, na outputu mora da imam posebno negativne brojeve, zatim posebno pozitivne brojeve ali da se ne ispisuju duplo i bez 0 (nula) i za kraj posebno da imam brojeve koji se pojavljuju vise puta.

Moj problem je što nikako ne mogu da izbacim nule i brojeve koji se ponavljaju iz pozitivnog niza.

Šaljem vam kopiju ekrana da vidite, sada više nemam ni te brojeve na izlazu. Pogubio sam se.

pomoc-krstarica.jpg


Radim u netbeans-u

Šaljem Vam kod koji sam do sada ispisao.

Unapred zahvalan na pomoći i objašnjenju

Kod:
package assignment;


import java.util.Arrays;

public class MyFirstAssignment {

    public static void main(String[] args) {

        int[] array = {12, 23, -22, 0, 43, 545, -4, -55, 43, 12, 0, -999, -87};
       
        Arrays.sort(array);
        
        int negativni = 0;
        int pozitivni = 0;
        
        for (int i = 0; i < array.length; i++) {
            if (array[i] < 0) {
                negativni++;
              
            }
        }
        pozitivni = array.length - negativni;
        negativni = array.length - pozitivni;
        
        int[] PozNiz = new int[pozitivni];
        int[] NegNiz = new int[negativni];

        int j = 0, k = 0;

        for (int i = 0; i < array.length; i++) {
            if (array[i] < 0) {
                NegNiz[j] = array[[COLOR="#FF0000"]j[/COLOR]];// ovde sigurno treba da stoji i umesto j
            
            j++;
        }
            
        else {if (array[i] > 0)
            PozNiz[k] = array[i];
              k++;
              }
        }

        //System.out.println("array :" + Arrays.toString(array));
        
        System.out.println("Negativni Niz :" + Arrays.toString(NegNiz));
        System.out.println("Pozitivni Niz :" + Arrays.toString(PozNiz));

        for (int i = 0; i < array.length - 1; i++) 
            if (array[i + 1] == array[i]) {
                //Totalno sam se pogubio na izbacuje mi duple brojeve a nije izbacio ni nule
                //Zar treba da radim jos jednu petlju?
                System.out.println("Dupli brojevi :" + array[i]);
                i = i + 1;
            }
        }
    }

ffasfga
 
prvo treba da izbacis broje koji se ponavljaju. da dobijes nov niz. Mozes i da iskoristis stari. Onda dobijes niz bez ponavljanja- Uradis na foru pitas da li je a!=a[i-1]
ako jeste onda b[j++]=a; imas pre toga deklaraciju i=0; i j=0;


ediit
pocnes od jedan tj i i j su jedan. Posto i-1 za i = 0 nije definisano. A pre loopa kazes da je a od 0 jednako b od nuka
 
Poslednja izmena:
import java.sql.SQLException;
import java.util.Arrays;

public class Kada {


public static void main(String[] args) {
int j=0;
int znak=0;//ispuje da li prvo ide negativni niz ili pozitivan
int i=0,k=1;
int[] a = {-1,-1, 0,0, 0, 67, 100, 92, 82, 8, 10, 25, 21, 65, 65, 73, 67, 55, 76, 38, 99, 95, 12, 38,};
int[] b= new int[a.length]; // cuvam broj ponavljanja u ovom nizu. svi clanovi su nula samo oni koji se ponavljaju su razliciti
Arrays.sort(a);


if(a[0]>=0)
{
System.out.print("Negativni niz nema clanova"+ "\nPozitivni niz:\n");
if(a!=0) System.out.print(a[0]+" ");
znak=0;
}
if(a[0]<0) {
System.out.print("Negativni niz\n"+a[0]);
znak=1;
}
while(i<(a.length-1))
{i++;
if(a!=a[i-1])
{if(a>0 && znak>0)
{
System.out.println("\nPozitivni niz"); znak=0;
}

if (a!=0) System.out.print(a+" ");


if(k>1)
{
b=k;
k=1;
}
}
else k++;// else je od prvog if-a, povecava za jedan ukoliko prvi uslov nije ispunjen, tj broji clanove koji se ponavljaju
}
while(j++<b.length-1)
{
if(b[j]>1)
System.out.print("\nbroj "+ a[j-1]+" ima "+b[j]+" ponavljanja");
}

}
 
Ne radi ti to odokativnom metodom. Moras da napravis hash tabelu i ovako i onako da bi mogao da brojis elemente...
Znaci niz pointera na niz/linked listu u koje stavljas kolizije. Ajde hash tabela se ionako implementira preko nizova, samo sto je vec imas u Javi pa ne mora da se mucis;)

edit:
mislim mozes da napravis sa slucajem da ima samo jedan element u hash tabeli pa su sve kolizije u jednom nizu, ali tad algoritam ima kvadratnu kompleksnost...
 
Poslednja izmena:
Evo ti resenje sa kvadratnim algoritmom u nimu, nek OP prevede na javu i sredi output da bi matchovao req.
Kod:
var
  pos = newSeq[(int,int)]()
  neg = newSeq[(int,int)]()
let
  input = [12, 23, -22, 0, 43, 545, -4, -55, 43, 12, 0, -999, -87]
proc addit(input: var seq[(int,int)], v:int) =
  var found = false
  for vv in input.mitems :
    if v == vv[0] :
      vv[1].inc
      found = true
  if not found :
    input.add((v,1))
for v in input :
  if v > 0 :
    pos.addit(v)
  else :
    if v < 0 : neg.addit(v)
echo "positive"
echo pos
echo "negative"
echo neg
 
Pa dao sam resenje preko nizova ;)
seq ti je dinamicki niz u nimu to bi ti bio ArrayList u javi. (int,int) je tuple to nemas u javi ali mozes staviti neku strukturu znaci broj i broj ponavljanja. Inace verboznost jave me nervira ;p

ja ne kapiram sta ti hoces da postignes. ovaj zadatak moze samo da se resi koristenjem nizova bez potrebe upotrebe dinamicki nizova i njihovih metoda.
 
Poslednja izmena:
Drugari,

Hvala vam mnogo na savetima!
Uspeo sam da rešim zadatak 3 dana kasnije nakon postavljanja pitanja za savet ovde na forum.
Evo i koda kako sam stigao do rešenja.

Kod:
package assignment;

import java.util.Arrays;

public class MyFirstAssignment {

    public static void main(String[] args) {

        int[] array = {12, 23, -22, 0, 43, 545, -4, -55, 43, 12, 0, -999, -87};

        int negativni = 0;
        int pozitivni = 0;

        for (int i = 0; i < array.length; i++) {
            if (array[i] < 0) {
                negativni++;
            } else if (array[i] > 0) {
                pozitivni++;
            }

        }

        int[] PozNiz = new int[pozitivni];
        int[] NegNiz = new int[negativni];

        int j = 0, k = 0;

        for (int i = 0; i < array.length; i++) {
            if (array[i] < 0) {
                NegNiz[j] = array[i];
                j++;
            } else if (array[i] > 0) {
                PozNiz[k] = array[i];
                k++;
            }
        }

        //System.out.println("array :" + Arrays.toString(array));
        System.out.println("Negativni Niz :" + Arrays.toString(NegNiz));
        System.out.println("Pozitivni Niz :" + Arrays.toString(PozNiz));

        Arrays.sort(array);

        System.out.println("Dupli brojevi su:");

        for (int i = 0; i < array.length - 1; i++) {
            if (array[i] == array[i + 1]) {

                System.out.println(array[i]);

            }
        }
    }
}

a evo i rezulttata koji je trebao da se pokaže.

_java_zadatak.JPG


Cela poenta zadatka je bila da prikazem kako rukujem sa naredbama kontrole toka, for petljom i if/else naredbama.
Važno mi je da mi je sada jasan princip rada.

Hvala vam još jednom na savetima i uloženom vremenu.

Pozdrav
 

Prilozi

  • _java_zadatak.JPG
    _java_zadatak.JPG
    18,3 KB · Pregleda: 158
Poslednja izmena:
Sta ako se broj ponavlja >2 puta?

Za određivanje duplikata sam koristio početni niz array, prvo sam ga sortirao pa prošao kroz njega for petljom. Petlja ide od nultog do predposlednjeg elementa. Zatim sam uporedio elemente sa susednim pozicijama pomoću if-a, i ako su jednaki, ispisao sam tekući element niza. Taj deo mi je uzeo najviše vremena kao početniku laiku, i još sam imao problem oko zagrada jer nisam zatvorio jednu od zagrada pa mi je netbeans prijavljivao grešku.

Sada sam počeo da radim sledeći zadatak, ovaj stari mi naspram ovog novog izgleda kao mačiji kašalj.. ali mora da se uloži vreme i trud, nema druge.

Hvala još jednom.

Pozdrav
 
daj taj novi zadatak. u koju srednju skolu ides.

Davno sam završio srednju školu, još pre 25 godina... a posle i fakultet ali sam rešio da se prešaltam i naučim nešto novo pa sam se prešaltao na učenje Jave.
Skoro 20 godina radim u IT sektoru, prodaja i servis računarske opreme ali posle toliko godina više baš i ne vidim sebe u tome a i realno sa padom cena hardvera i prateće opreme više ni nema poente popravljati nešto kada se pokvari tako da sam shvatio da novo tržište zahteva novo znanje.. barem za mene je tako, a i volim da učim nešto novo. Lepo kažu stariji, učiš dok si živ (:

Nije mi problem da postavim novi zadatak, ali želim prvo da se sam namučim da dođem do rešenja... ako negde zaglavim postavit ću ga ovde, za sada imam potrebu da ga sam rešim, nadam se da razumeš šta hoću da kažem.

Prošli zadatak sam se mučio više od 10 dana dok ga nisam postavio, a veruj mi da sam na njemu proveo minimum 4-5h dnevno.

Pozdrav.
 

Back
Top