joi, 28 noiembrie 2019

Gestionarea blogurilor

Salut! Azi gestionăm bloguri 😄

Felicitări! 👏👏👏👏👏👏

Dacă ați ajuns aici înseamnă că deja ați creat blogul dvs personal!

Urmează să adăugați postări interesante pentru ca acesta să devină cât mai captivant și atractiv!

Aici găsiți câteva filmulețe despre gestionarea postărilor folosind platforma www.blogger.com:

Crearea postărilor: 
Formatarea textului





Înserarea fișierelor video





Video on youtube


miercuri, 18 septembrie 2019

Prelucrarea tablourilor în Java

Dacă răsfoiți această postare înseamnă că doriți să studiați care este modalitatea de lucru cu masivele în Java. Vă doresc succes și sper că această postare o să vă fie utilă! 

Ce sunt vectorii?
Un vector, tablou sau array reprezintă un container pentru un număr de elemente de același tip, fiecare element fiind indexat de un număr. În limbajul Java vectorii sunt obiecte, tipul acestora fiind referință.
Vectorii sunt de 2 tipuri:
ü  cu lungime fixă – dimensiunea  vectorului este stabilită la crearea acestuia și nu poate fi modificată ulterior. Pentru ei nu există o clasă care se instanţiază  pentru a obține un obiect vector.
ü  cu lungime variabilă – dimensiunea vectorului poate fi modificată pe parcursul rulării programului. Pentru ei există clase Java predefinite ce pot fi instanțiate (de ex.  java.util.Vector, java.util.Arrays, ș.a).
Iată structura unui vector:

După cum observați în figura de mai sus, fiecărui element dintr-un vector îi corespunde un index numeric, cu ajutorul căruia poate fi accesat. Numerotarea elementelor începe întotdeauna de la 0, ceea ce înseamnă că, de exemplu, cel de-al nouălea element va fi accesat de indexul 8.

Cum se folosesc vectorii?
Pentru a folosi un vector este necesar să:
1    .  declarați o variabilă de tip vector care permite referirea la un obiect vector;
2    .  construiți obiectul vector specificându-i dimensiunea, adică numărul de elemente ce îl poate stoca;
3    .  accesați elementele vectorului cu ajutorul variabilei de tip vector cu scopul de a le atribui valori sau a obține valorile acestora.

Cum se declară variabila de tip vector?
Variabila de tip vector se declară în felul următor:       tip [] nume;
unde 
-        tip indică tipul de date al elementelor conținute de vector;
-        parantezele pătrate sunt simboluri speciale ce indică ca variabila respectivă este un vector;
-        nume  fiind identificatorul variabilei vectorului;
Ca şi în cazul altor tipuri de variabile, declararea nu creează de fapt un vector, dar pur şi simplu anunță compilatorul că variabila respectivă va deține un vector de tipul specificat. Deci, la această etapă vectorul nu poate fi utilizat.
Exemple:
          byte[] anArrayOfBytes;
short[] anArrayOfShorts;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;
Cum se crează un vector?
Un vector poate fi creat utilizând operatorul new printr-o construcție de forma:

new tip_vector [dimensiune]; 
unde, tip_vector reprezintă tipul elementelor stocate în vector, iar dimensiune este o expresie de tip întreg pozitivă ce semnifică numărul de elemente ce se vor stoca în vector.
Întreaga construcție va crea un vector de tip tip_vector cu o dimensiune de dimensiune elemente indexate de la 0 la dimensiune-1.
Dacă această instrucțiune ar lipsi, compilatorul ar afișa o eroare asemănătoare celei mai jos și execuția programului ar eșua:    Variable anArray may not have been initialized.
De exemplu:
int [] a;             // se declară variabila a ce conţine referință către un vector cu elemente întregi
a = new int[5];     // se crează un vector cu 5 elemente întregi de același tip cu variabila a 
Cum accesăm elementele unui vector?
Fiecare element distinct din vector poate fi accesat ca o variabilă separată printr-o construcție de forma:
nume [index]
unde nume reprezintă numele vectorului ce stochează elementele, iar index este o expresie de tip întreg strict pozitivă ce semnifică poziția elementului care doriți să îl accesați din vectorul dat. Dacă vectorul conține n elemente atunci index trebuie să fie cuprins în intervalul  [0, n-1], în caz contrar o excepție de execuție va fi semnalată.
De exemplu:
int [] a;                // se declară variabila a ce conţine referință către un vector cu elemente întregi
a = new int[5];     // se crează un vector cu 5 elemente întregi de același tip cu variabila a
a[0] = 23;               // primului element din vector i se atribuie valoarea 23
a[4] = 10;             // ultimului element din vector i se atribuie valoarea 10
a[5] = 9;              // excepție generată! Indexul nu se află în diapazonul [0,4]
Alternativ, poate fi creat și inițializat un vector în felul următor:
int[] anArray = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};
În acest caz, lungimea vectorului este determinată de numărul de valori furnizate între acolade.

Cum se determină dimensiunea unui vector ?
Fiecare vector conține, pe lîngă elemente, o variabilă de instanță publică ce nu poate fi modificată numită length ce stochează numărul de elemente în vector. Prin urmare accesând această variabilă putem obține lungimea unui vector.
Exemplu:
double[] v;
v = new double[5];
System.out.println(v.length);      // se va afișa valoarea 5

Ce este o matrice?
O matrice este o colecție de elemente de același tip, organizate în formă de tabel în care fiecare element este indexat de o pereche de numere ce identifică numărul de rând și numărul de coloană la intersecția cărora se află elementul.
În Java o matrice este formată din mai mulți vectori fiecare reprezentând cîte un rând din matrice și mai este numită vector de vectori.

Cum se declară o matrice?
O matrice se declară în felul următor (asemănător ca la vectori):
int[][] m; // declarația unui vector de vectori

Cum se crează o matrice?
Înainte de a folosi o matrice aceasta trebuie creată, la fel ca vectorii. De exemplu, următoarele doua secvențe de creare a unei matrici sunt echivalente:
m = new int[3][]; //se crează un vector ce va conține 3 elemente, fiecare conținând
                                           // cîte o referință la un rând din matrice.
m[0] = new int[5]; // se crează un rândul 0 din matrice (5 coloane)
m[1] = new int[5]; // se crează un rândul 1 din matrice (5 coloane)
m[2] = new int[5]; // se crează un rândul 2 din matrice (5 coloane)

                                                                                    <=>                                  
m = new int [3][5];
Rețineți faptul că, dacă utilizați cea dea doua modalitate forțați toate rândurile să conțină 5 coloane, pe când folosind prima modalitate rândurile pot avea număr de coloane diferit.
Observați în exemplul următor: 
Cum se accesează elementele unei matrici?
Pentru a accesa un element este necesar de a specifica indicele de rând și coloană la intersecția căruia se află elementul folosind construcția:

variabila_matrice[indice_rînd][indice_coloană]
Exemplu:
int[][] m = new int [3][5];
m[1][2] = 39; // se atribuie elementului din rândul 1 coloana 2 valoarea 39
m[0][0] = 44;  // se atribuie elementului din rândul 0 coloana 0 valoarea 44
System.out.println(m[1][2]); // se accesează elementul din rândul 1 coloana 2, se afișează 39

Cum depistați dimensiunea unei matrici?
Folosind variabila length,  aveți posibilitatea de a obține numărul de rânduri și coloane a matricei. Fie ca m este o referință către o matrice, atunci:
  ü  m.length denotă numărul de rânduri
  ü  m[i].length denotă numărul de coloane a rândului i din matricea m.
Rețineți faptul că, dacă toate rândurile au același număr de coloane puteți folosi expresia m[i].length.
De exemplu:
double[][] v;
v = new double[15][20];
System.out.println(v.length); // afișează 15
System.out.println(v[0].length); // afișează 20

Cum parcurgem elementele unei matrici?

public class Parcurgere {
 public static void main(String[] args) {
  int [][] m = new int[2][2];
   m[0][0] = 2; m[0][1] = 4;
   m[1][0] = 3; m[1][1] = 5;
  for (int i = 0; i < m.length; i++) {
   for (int j = 0; j < m[0].length; j++)
      System.out.print(m[i][j] + " "); 
  System.out.println();
  }
}}

public class parcurgere1 {
 public static void main(String[] args) {
  int [][] m = { {2,4},
                  {3,5} };
  for (int i = 0; i < m.length; i++) {
   for (int j = 0; j < m[0].length; j++)
      System.out.print(m[i][j] + " "); 
  System.out.println();
  }}}

miercuri, 20 februarie 2019

Cum creem fișiere executabile în Java?


Utilitarul jar (Java Archive) care face parte din pachetul JDK oferă oportunitatea de a crea arhive jar executabile. O astfel de arhivă invocă metoda main a unei clase la efectuarea unui click dublu pe aceasta. 

Pentru a crea un fișier java executabil, este necesar crearea fișierului manifest ce are extensia .mf

Ps! Mai întâi și întâi trebuie, desigur, să aveți finisat codul aplicației sau proiectului. Eu am creat anterior un mini Notepad.

Pentru a crea fișierul manifest utilizați aplicația Notepad sau Wordpad și respectați sintaxa conținutului acestuia:

Main-Class: First 

First este numele clasei principale. De exemplu:

Main-Class: Notepad 

În fișierul .mf după numele clasei se va însera obligatoriu un rând liber. Salvați fișierul cu extensia .mf.

Folosind aplicația CMD, compilați aplicația Java:

Creați arhiva respecând sintaxa:

jar -cvmf myfile.mf myjar.jar First.class 

myfile.mf - numele fișierului manifest 

myjar.jar – numele viitoarei arhive jar 

First.class - numele fișierului binar creat de către JVM în urma compilării reușite a aplicației Java. 
Deci, conform exemplului meu:

În rezultat, în dosarul cu fișierele de lucru a fost creată arhiva executabila Java, Notepad.jar:



După executarea a dublu click pe acestă arhivă se va invoca metoda main() a aplicației:





Sper că această postare vă este utilă.

Este binevenit orice comentariu!

Să aveți parte de o zi extraordinară !!!!!

joi, 7 februarie 2019

Clasele ce descriu excepții în Java

Procesul de programare va fi mereu însoțit și de diverse probleme legate de viitorul soft. Programatorului îi revine misiunea de a prezice care sunt aceste probleme ce pot apărea în procesul execuției software-ului și de a reduce la minim apariția acestora. 



O excepție este un eveniment anormal ce apare în timpul execuției unui program şi duce la oprirea acestuia. 

Procesul de izolare a situațiilor excepționale și controlul comportării aplicației în momentul apariției acestora este numit tratarea excepțiilor. 

O excepție poate fi generată din diverse motive: împărțirea la 0, deschiderea unui fişier care nu există, accesarea indexului unui tablou care depășește limitele acestuia, ș.a. 

Java pune la dispoziția programatorilor clasa Throwable din care sunt extinse toate celelalte excepții, şi care face parte din următoarea ierarhie:


Clasa Object este părintele tuturor claselor Java. 

Clasa Throwable împarte excepțiile în 2 categorii : 



- Verificate (checked): sunt excepții verificate la faza de compilare. Nu țin de algoritm, ci de anumite condiții care ar putea afecta execuția programului (ex. fișier absent, date de intrare nevalide, probleme ce țin de baze de date, ș.a). Dacă un oarecare cod dintr-o metodă ar putea genera o astfel de excepție atunci este obligatoriu de a oferi un mecanism de tratate a acesteia fie prin try...catch fie cu ajutorul cuvântul rezervat throws, în caz contrar aplicația nu va putea fi lansată la execuție. Programatorul este forțat să trateze așa tip de excepții. 

- Neverificate (unchecked): sunt excepții care nu sunt verificate la faza de compilare ci la faza de execuție, și sunt o consecință a neatenției programatorului la elaborarea algoritmului (ex. împărțirea la 0, accesarea unui membru care nu există, ș.a). Acestea deasemenea pot fi tratate, însă la discreția programatorului.

În Java excepțiile derivate din clasele Error și RuntimeException sunt excepții neverificate (unchecked), orice altă clasă de excepție derivată din Throwable este verificată (checked). 

Instanțele clasei
Error reprezintă erori interne, nerecuperabile, ale mediului de lucru Java. Aceste erori sunt rare şi de obiecei fatale, nu le putem intercepta, însă există pentru ca Java să le poată folosi dacă are nevoie de ele.

Iata câteva excepții predefinite ale limbajului Java:



ArithmeticException
Eroare de tip aritmetic, de exemplu împărțire la zero.
ArrayIndexOutOfBoundsException
Indexul din sir este în afara limitelor
ArrayStoreException
Se încearcă atribuirea unui element din șir cu o valoare incorectă.
ClassCastException
Cast incorect.
IllegalArgumentException
Parametrul transmis metodei este greșit.
IndexOutOfBoundsException
Indexul este în afara limitelor
NullPointerException
Folosirea obiectului neinstanțiat (egal cu null).
NumberFormatException
Conversia dintr-un string într-un numar a eșuat.
StringIndexOutOfBounds
Indexul unui string este in afara limitelor
IllegalAccessException
Acces la clasa nepermis.
NoSuchFieldException
S-a încercat accesarea unui membru care nu exista.
NoSuchMethodException
S-a încercat accesarea unei metode care nu exista.



Java, la fel ca alte limbaje de programare, oferă tehnici speciale ce permit interceptarea și tratarea excepțiilor într-un mod standard și destul de comod.



În Java tratarea excepțiilor este obligatorie, orice secvență de cod ce poate provoca excepții trebuie să fie însoțită şi de o modalitate de tratare a acesteia:

1) declararea excepției în semnătură metodei:
De exemplu:
public static void main(String [] args) throws FileNotFoundException { 

   // corpul metodei ce conține codul ce poate genera excepții 

2) folosind blocurile try ... catch...finally:

Blocul try blochează toate instrucțiunile ce pot genera excepții. Are sintaxa :
try{
 // instrucțiuni ce pot genera excepții
}

Rețineți!

1) Un bloc try poate fi urmat fie de un bloc catch fie de un bloc finally, însă nu poate exista  
    de unul singur.

2) Dacă instrucțiunile grupate de blocul try vor genera o excepție aceasta va fi tratată de 
    blocul catch corespunzător tipului de eroare aruncată (generată).

3) Dacă instrucțiunile se vor executa cu succes nu se va mai ține cont de tratarea 
    excepțiilor şi aplicaţia se va executa în mod normal. 



Blocul catch este blocul în care sunt tratate excepțiile. Are sintaxa :

catch (ClasaDeExceptii numeVariabila{ 
       // instrucţiuni de tratare 


ClasaDeExceptii reprezintă clasa excepției tratate. numeVariabila este o variabilă cu ajutorul căreia putem accesa metodele clasei excepției tratate. Deseori cu această variabilă nu se lucrează dar şi în acest caz ea trebuie declarată obligatoriu altfel obținem eroare sintactică precum că nu s-a respectat sintaxa instrucţiunii catch.

Rețineți!

1) Blocul catch NU poate exista singur, ci doar însoțit de un bloc try.

try {...
}catch(...){
}
2) Între blocul try şi primul bloc catch nu pot exista alte instrucțiuni.
3) Un bloc try poate fi însoțit de orice număr de blocuri catch.

Dacă în exemplul de mai sus vom încerca să afișăm s[1] vom obține la ecran valoarea 2

Blocul
finally nu apare niciodată singur ci în asociere cu blocul try. Cuprinde codul care trebuie să se execute indiferent dacă apar excepții în blocul try sau nu. 
Prin clauza finally instrucțiunea try... catch devine completă. 

Acest bloc are sintaxa :
finally {
// instrucțiuni executate indiferent
}


Instrucțiunea try...catch...finally are următoarea formă completă :


Exemplu: 

class exe6 {
 public static void main(String [] args){
  int x= (int)(Math.random()*5);
  int y= (int)(Math.random()*8);
  int [] z={1,2,3,4,5};
  try {
   System.out.println("Sau generat numerel : "+x+" "+y);
   System.out.println("x/y este "+x/y);
   System.out.println("y="+y+"z[y]="+z[y]);
  }catch (ArithmeticException e1 ){
    System.out.println("problema aritmetica : Impartire la 0");
  }catch (IndexOutOfBoundsException e2){
    System.out.println("depasire de index"+e2);
  }finally { System.out.println("Elaborat de mine !");
}}
}

Programatorul, la rândul său deasemenea poate defini și genera excepții proprii cu ajutorul instrucțiunii throw.
De obicei de acest lucru este nevoie atunci când apare o situație în care oricare excepție predefinită Java nu este relevantă. Pentru aceasta este suficient de a definiti o clasa derivată din Exception
Clasele derivate de utilizator nu trebuie sa implementeze nimic, simpla lor apartenență la ierarhia de tipuri permite utilizarea lor ca excepții. 
Clasele create de utilizator dispun, prin moștenire, de proprietățile și metodele definite de clasa Exception
Pentru a trata o astfel de excepție în clasa test se va crea forțat o astfel de excepție.


Rețineți! 
Cu ajutorul cuvântului rezervat throw avem posibilitatea de a crea explicit un tip de excepție propriu, adică putem crea o instanță excepție, arunca și trata la faza de execuție. Se folosește nemijlocit însoțită de blocul try. Cuvântul rezervat throws ne ajută atunci când dorim să aruncăm, sau transferăm eroarea, astfel încât aceasta să fie tratată de compilator automat, adică eroarea nu va fi tratată de noi explicit într-un bloc try
Cuvântul rezervat throws se scrie în semnătura metodei codul căreia ar putea genera o excepție. Acesta va fi urmat de tipul erorii sau tipurile erorilor ce pot fi generate și deasemenea se poate folosi în semnătura metodei main().

Exemplu în care s-a creat propria clasă de excepție. Excepția se va genera forțat atunci cînd utilizatorul va introduce un număr negativ:  

import java.util.*;
 public class Exemplul_3 {
  public static void main(String [] args){
   int nr;
   Scanner in = new Scanner(System.in);
    try{
     nr = in.nextInt();
     if (nr < 0) throw new MyExceptionPozitiv();
     if (nr%2==0) System.out.println("Numar par !");
      else System.out.println("Numar impar !");
   }catch ( InputMismatchException ex){
     System.out.println("Introduceti un numar intreg!!!");
   } catch (MyExceptionPozitiv ex) {
     System.out.println(ex);
} in.close();
}}


class MyExceptionPozitiv extends Exception{
  MyExceptionPozitiv() {}
  public String toString(){
    return "Valoarea introdusa nu este pozitiva"; 
   }
}


Sper că această postare vă este utilă.

Este binevenit orice comentariu!

Să aveți parte de o zi extraordinară !!!!!