Pereiti prie turinio

Rekomenduojami pranešimai

Sveiki, ką tik perėjau prie Java, pasidariau programą pirmą ir bėda dabar tokia.

 

Viršuje apsirašau masyvus, išskiria vietą jiems, tačiau čia nurodytas mano paties dydis tų masyvų. Šiuo atveju 4, 3 ir 10. Tačiau duomenų eilučių įrašau tik 2 tarkim kokias. Ir tada kai išvedu duomenis naudodamas ciklą tam masyvui, man išvestų tas 2 eilutes duomenų, bet kadangi masyvo dydis 4, tai man dar dvi eilutes išveda su null duomenimis.

 

Taigi, kaip reiktų apsirašyt tuos masyvus, kad galėčiau įvairius duomenų kiekius įvest, ir išvedimas gražiai gautųsi, su būtent tiek elementų kiek aš įvedžiau?

 

Prisegu failą, aiškiau bus. http://pastebin.com/JcJiFyju

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na, jei naudoji masyvus, tai reiktų tada nurodyti "efektyvųjį dydį" kaip kažkokią reikšmę, kur sektum, kiek iš tiesų yra užpildyta.

O šiaip, man labai patinka List'ai Javoje. Dažniausiai ir pakeičia masyvus, kadangi nereikia nurodyti dydžio, pilna visokių metodų, gali naudoti bet kokius tipus. Labai geras dalykas :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Rimtai, sekti kiekį duomenų eilučių. Ačiū labai. :) O tų Lists dar nelabai ir įsivaizduoju kas čia yra, pirmas prisilietimas kol kas čia prie Java buvo. Išsiaiškinsiu būtinai.

Paprasti masyvai Javoje berods ne ką skiriasi nuo C masyvų (nebent labai giliai įlindus) – tiesiog jei 10 vietų masyvas, tai atminties blokas, skirtas 10 tam tikro tipo reikšmių, ir tiek. List'ai ir panašūs konteineriai yra jau „gudresni“, klasėm paremti dalykai, kurių dydis automatiškai keičiasi, kai vietos nebeužtenka. Bet, aišku, ir masyvai turi savo panaudojimą :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O kaip tarkim daryti su exception, kad jeigu pasirašau, kad masyve būtų 10 vietų, nors užpildau tiktai 2 vietas, nes man tada meta klaidele, kad ne visas užpildytas

 

Nesu tikras, kaip taip padarai. Mestelk kodą.

array = new int[10];
array[0] = 123;
array[1] = 321;

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tiesiog reikėjo pradėjom mokintis java ir liepė kokį C++ laborą persidaryt ant javos, tai aš tiesiog paprastą masyvo perašymą dariau

    void formuoti(Pyragas[] P, int n, Pyragas[] Pr){
       int nr = 0;
       for(int i = 0; i < n; i++){
           if(P[i].getKita() > 10){
               Pr[nr] = P[i];
               nr++;
           }
       }
   } 

 

Bet padariau kitaip, nepraktiškai ir labai bjauriai, padariau panašia funkciją, kuri tikrai grąžintu elementų kiekį naujam masyvui

 

    int kiek(Pyragas[] P, int n){
       int nr = 0;
       for(int i = 0; i < n; i++){
           if(P[i].getKita() > 10){
               nr++;
           }
       }
       return nr;
   } 

 

Brrr, baisiau būt negali:D

Pyragas[] Pr = new Pyragas[kiek(P, n)]; // Naujas masyvas

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nu tai o kaip C++ būtum daręs? Turbūt turėjai antrą masyvą vienodo dydžio, tai gali čia lygiai taip pat daryti. Kaip laborui, tai turbūt nesvarbu keli baitai atminties šen ar ten. :)

 

Esmė, kad jei ant javos pasirašau, kad masyvas bus 10 dydžio, o užpildau tik dviem, meta erora raudoną, nors skaičiuoja

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Esmė, kad jei ant javos pasirašau, kad masyvas bus 10 dydžio, o užpildau tik dviem, meta erora raudoną, nors skaičiuoja

Duok visą kodą ir errorą. Dabar iš kavos tirščių burti tegalim.

 

justinas@ubuntu /tmp cat A.java  
public class A {
   public static void main(String[] args) {
       int[] a = new int[10];
       a[0] = 1;
       a[1] = 2;
       System.out.println(a[0]);
   }
}
justinas@ubuntu /tmp javac A.java
justinas@ubuntu /tmp java A      
1

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

http://pastebin.com/82GnKiwy

 

Esmė, kad skaičiuoja, tik su ciklu galbūt kitu veiktu, nebandžiau. Bet žinant KTU dėstytojus, tai nepraleis pro akis tai

run:
Pyragas kuriam reikia maziausiai kiausiniu: Pirmasis pyragas
Sunkiausias pyragas (miltų + kitų priedų): : Treciasis pyragas
Vidurkis (miltu + kitu produktu): 16.5
Pradiniai duomenys
--------------------------------------------------
|    Pavadinimas    | Kiausiniai | Miltai | Kita |
--------------------------------------------------
| Pirmasis pyragas  | 1          | 1      | 1    | 
| Antrasis pyragas  | 5          | 10     | 15   | 
| Treciasis pyragas | 3          | 15     | 20   | 
| Ketvirtas pyragas | 3          | 3      | 3    | 
--------------------------------------------------
Atrinkti duomenys
--------------------------------------------------
|    Pavadinimas    | Kiausiniai | Miltai | Kita |
--------------------------------------------------
| Antrasis pyragas  | 5          | 10     | 15   | 
| Treciasis pyragas | 3          | 15     | 20   | 
Exception in thread "main" java.lang.NullPointerException
at LD1.spausdinti(LD1.java:114)
at LD1.main(LD1.java:142)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)

Redagavo Arvis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Visų pirma, labai keista, kad taip naudoji statinius metodus, kur turėtum naudoti metodus ant objekto. Nežinant KTU dėstytojų, vis tiek manau, kad tai nepraeitų.

O klaida yra lygiai tokia pati kaip pas viršutinį kolegą: sukuri masyvą su 10 reikšmių ir per jį visą iteruoji, nors jis nėra pripildytas reikšmių.

Klaidos aiškiai aprašytos, iš tiesų, ir nėra ką čia beaskyti daugiau.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Būtent – Pr.length yra 10 (nes tiek sukuri). P.length, žinoma, yra 4, nes masyvą deklaruoji kaip konstantą jau su nariais, be ilgio.

 

Todėl spausdindamas po dviejų esamų reikšmių imi Pr[2], jo reikšmė yra null (kadangi ne primityvus tipas, o objektas), bandai su null kažką protingo veikti – gauni NullPointerException. Paprasta.

 

Vietoj to iš formuoti() grąžink, kiek jis sudėjo elementų į naująjį masyvą. Taip tą naują ilgį pasižymėsi ir funkcijoms pasuosi jį (o ne Pr.length).

 

Visų pirma, labai keista, kad taip naudoji statinius metodus, kur turėtum naudoti metodus ant objekto. Nežinant KTU dėstytojų, vis tiek manau, kad tai nepraeitų.

O klaida yra lygiai tokia pati kaip pas viršutinį kolegą: sukuri masyvą su 10 reikšmių ir per jį visą iteruoji, nors jis nėra pripildytas reikšmių.

Klaidos aiškiai aprašytos, iš tiesų, ir nėra ką čia beaskyti daugiau.

Tai kad viskas lyg ir ok, mano manymu... Pyragas yra kaip atskiras tipas, o visokios funkcijos, kur ima ne vieną pyragą, o masyvą, tai lai ir būna kaip statiniai metodai. Man ne kaip atrodytų tam be reikalo kurti objektą "PyragoStatistikosVedejas", bet gal tiesiog Javos filosofijos nesuprantu :huh: .

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Siaip is sono cia pastebejimas apie KTU destytojus, kazkaip kiek domejausi uz sita pirma labora nelabai kas gavo maziau negu auksciausias ivertinimas (cia tarp programeriu) , ir visu atsiliepimai buvo, kad nieko ten jie per daug neziurejo/netikrino, tai nezinau kodel taip pergyveni. Lyginant su pirmu kursu, javos destytuvai skiriasi kaip diena ir naktis nuo blonskio chebros :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 2 savaičių...

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...