Sunteți pe pagina 1din 8

Aplicatii simple stand alone in Java. Operatori. Instructiuni. Tablouri de variabile.

Simple stand alone Java applications. Operators. Instructions. Arrays of variables.

Obiective:
- implementarea unor aplicatii simple in Java
- implementarea aplicatiilor Java care lucreaza cu operatori, instructiuni, tablouri de variabile

Objectives:
- implementing simple Java applications
- implementing Java applications that work with operators, instructions, arrays of variables

Aplicatii simple stand alone Java


Pentru dezvoltarea aplicatiilor simple stand alone limbajul de programare Java definste urmatoarele tipuri simple
(elementare) de date: byte, short, int, long, char, float, double şi boolean.

Java pune la dispoziţia programatorului aşa numitele clase încapsulatoare (wrapper classes). Fiecarui tip de date
elementare îi este asociată o clasă încapsulatoare cu acelaşi nume cu cel al tipului pe care îl reprezintă.

Clasele încapsulatoare sunt localizate în pachetul java.lang.

Clasele încapsulatoare şi tipurile elementare asociate sunt menţionate mai jos:

- Clasa Void este asociată tipului void


- Clasa Byte este asociată tipului elementar byte.
- Clasa Short este asociată tipului elementar short.
- Clasa Integer este asociată tipului elementar int.
- Clasa Long este asociată tipului elementar long.
- Clasa Float este asociată tipului elementar float.
- Clasa Double este asociată tipului elementar double.
- Clasa Boolean este asociată tipului elementar boolean.
O instanță a unei clase încapsulatoare este un obiect nemodificabil și stochează o singură valoare primitivă echivalentă.

Toate clasele de mai sus sunt marcate cu specificatorii de acces public final, ele oferind metode utile in prelucrarea
datelor.

În anumite circumstanțe mediul Java ascunde utilizarea claselor încapsulatoare prin utilizarea mecanismelor de
autoboxing și unboxing.
Limbajul de programare Java are operatorii foarte asemănători cu cei din limbajul C/C++, dar există o şi serie de
diferenţe care îi deosebesc.

Ca si diferente avem printre altele:


>>> Operator de shiftare pe biţi, la dreapta, fără semn
Limbajul de programare Java defineşte urmatoarele tipuri de variabile.

 variabile elementare: sunt variabilele care au ca tip un tip de date elementar


 variabile de tip instanţă: sunt variabilele de tip obiect sau instanţă a unei clase Java
 variabile de tip clasă: sunt variabilele declarate cu cuvântul cheie static şi care aparţin de clasă în care au fost
declarate şi nu de o instanţă particulară a acesteia
 variabile locale: sunt variabilele declarate în interiorul unei secvenţe de cod (clasă, interfaţă, metoda sau orice
bloc de date delimitat prin {...})
 variabile de tip parametru: sunt variabilele care sunt trimise ca parametri către metode
Instrucţiuni Java
Ca şi în cazul celorlalte limbaje de programare, programele scrise în Java conţin instrucţiuni care sunt interpretate de
compilator prin parsarea fişierelor sursa de sus în jos.

Instrucţiunile Java sunt de următoarele tipuri:

 instrucţiuni condiţionale (if-else, switch)


 instrucţiuni repetitive (do-while, while, for)
 instrucţiuni de dirijare a executării programului (break, continue, return)
Instructiunile sunt asemanatoare limbajului C/C++ cu unele deosebiri date de facilitati noi permise cum ar fi:
break si continue cu etichete, instructiunea for() generalizata (for_loop), switch(), case cu String, etc.

Tablouri de variabile (unidimensionale, multidimensionale)

Alăturări de elemente de același tip (date primitive sau instanțe de clasă), accesate pe baza indexului lor.

Declarare: tip_date nume_variabila[ ]; sau


tip_date [ ] nume_variabila;
Alocare memorie: nume_variabila = new tip_date[nr_elemente];

Accesul la elemente se face pe baza indexului (int);

Proprietatea .length => numărul de elemente din șir asiciata la alocare

Clasa Arrays
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Arrays.html

=> operații pe variabile de tip tablou (căutări, sortări, copieri, etc.)


Clasa String
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html

=> permite tratarea unitara a şirurilor de caractere; toate variabilele literale Java care conţin o secvenţă de caractere pot
fi prelucrate prin intermediul acestei clase.

Exemplu:
//declararea şi iniţializarea unei variabile de tip String
String sir = new String(”abc”);

! Variabilele de tip String nu pot fi modificate odată ce au fost iniţializate.

Un obiect din clasa String poate fi transformat într-un șir de caractere in reprezentare Unicode, folosind metoda
toCharArray( ), fără caracterul '\0’ la sfârșit (deosebire față de C/C++)

Clasa String are constructori si metode adecvate care vor fi detaliate ulterior.

Java pune la dispoziţie un mecanism prin care se permite operatorului + (cu prioritate mai mare decat a
opertorilor relationali) să fie folosit pentru concatenarea variabilelor de tip String. Se permite de asemenea concatenarea
variabilelor de tip String cu variabile de alte tipuri, inclusiv cele elementare (byte, short, int, etc.). Acest lucru este posibil
datorită faptului că orice clasă Java este considerată ca fiind derivată (direct sau indirect din clasa Object) iar aceasta poate
transforma în variabile String datele conţinute (metoda toString).

Exemplu:
String s1 = new String(”abc”);
String s2 = s1 + ”def”; //şirul ”def” este convertit automat în String
String s3 = s1 + 5; //se concatenează şirul iniţial cu şirul de caractere ”5”
System.out.println(s1 + s2 + 100.23f);
//etc.

Exemple generale:

1. Operatori logici pe biti:


public class OpLogiciBiti {
public static void main(String args[]) {
int a= 27; // 0x001B;
int masca= 15; // 0x000f;
System.out.println(" ~a= "+ Integer.toBinaryString(~a)+"=
0x"+Integer.toHexString(~a));
System.out.println(a+" & "+masca +"= "+ (a&masca)+" =
"+Integer.toBinaryString(a&masca));
System.out.println(a+" | "+masca +"= "+ (a|masca)+" =
"+Integer.toBinaryString(a|masca));
System.out.println(a+" ^ "+masca +"= "+ (a^masca)+" =
"+Integer.toBinaryString(a^masca));
}
}

2. Instructiunea for( ) standard si for_loop( )


import java.util.Scanner;

public class Test {


static Scanner in=new Scanner(System.in);
public static void main(String[] args) {
int nota, nr;
System.out.println("Introdu nr. note : ");
nr=in.nextInt();
int note[ ]=new int[nr];
System.out.println("Introdu notele : ");
for(int i=0;i<note.length;i++) {
nota=in.nextInt();
if(nota<=10 && nota >=1)note[i]=nota;
else { System.out.println("Nota incorecta. Reia: "); i--;continue;}
}
System.out.println("Notele introduse sunt: ");
for(int it: note)
System.out.print(" " + it);
}
}
3. Instructiunile break si continue cu etichete folosind tablouri cu nr. de coloane variabile

public class LabelBreakContinue {


public static void main(String[] args) {
int tabi[ ][ ] = {{1, 5, 3}, {11}, {7, 11, 9, 13}, {8,11}};
System.out.println("Val. din matrice pana la prima divizibila cu 2:");
et0: for(int i=0; i<tabi.length; i++){
System.out.print("\nlinia " + (i+1) + ": ");
for(int j=0; j<tabi[i].length; j++){
if(tabi[i][j] % 2 == 0)
continue et0;
System.out.print(tabi[i][j] + " ");
}
}

int mati[ ][ ]= {{1, 2, 13}, {5}, {8, 19, 6}};


int i=0, j=0;
boolean gasit=false;
et1: for(i=0; i<mati.length; i++)
for(j=0; j<mati[i].length; j++) {
if(mati[i][j]%3==0) {
gasit=true;
break et1;
}
}
if(gasit)
System.out.println("\nPrima Valoarea modulo 3 e: " + mati[i][j]+" pe pozitia, linia: "+(i+1)+",
coloana: "+(j+1));
else
System.out.println("\nNici un numar div. cu 3");
} //main
}

4. Utilizarea clasei Arrays in gestiunea tablourilor

import java.util.Arrays;

public class JavaArraysExample {


public static void main(String[ ] args) {
// Base array for the example. It contains 9 elements.
int[ ] baseArray = { 2, 4, 3, 7, 21, 9, 98, 76, 74 };
// Sorts the specified range of the array into ascending order.
System.out.printf("\nUnsorted baseArray:");
for (int it: baseArray) System.out.printf(" %d ", it);

Arrays.sort(baseArray, 0, baseArray.length);//fromIndex toIndex


System.out.printf("\nSorted baseArray: %s\n\n", Arrays.toString(baseArray));

// Assigns the specified int value to each element of the


int[] fillArray = new int[10];
System.out.printf("fillArray (before): %s\n", Arrays.toString(fillArray));
Arrays.fill(fillArray, 0, fillArray.length, 3);//array, fromIndex, toIndex, Value
System.out.printf("fillArray (after): %s", Arrays.toString(fillArray));
}
}

Lucru individual

1. Scrieti o aplicatie Java care defineste o valoare intreaga si apoi afiseaza reprezentarea ei binară, octală și
hexazecimală. Scrieți metode de conversie a valorii citite în diferite baze de numeratie.

2. Implementati algoritmii cunoscuti de ordonare a sirurilor numerice (bubble sort, insertion sort, quick sort, etc.) si
aplicati-i asupra unui sir de valori intregi citite de la tastatura.

3. Sa se citeasca de la consola o valoare intreaga mai mare decat 16.777.216. Sa se foloseasca masti pe biti pentru a izola
fiecare din cei 4 octeti ai valorii citite. Afisati atat valoarea initiala cat si valorile izolate in zecimal, binar si hexazecimal.

4. Sa se citeasca de la tastatura elementele unei matrice m x n de valori intregi. Sa se implementeze metodele care:
- afiseaza matricea linie cu linie, apoi coloana cu coloana; considerati si cazul in care numarul de coloane la fiecare linie
este mai mare cu 1 fata de linia precedenta;
- elimina din matrice (egalizeaza cu 0) valorile care nu sunt cuprinse intre doua limite specificate
- afiseaza vecinii existenti ai unui element a carui indecsi sunt trimisi ca parametri

5. Scrieti un program Java care genereaza 2 valori aleatoare si efectueaza asupra lor cateva operatii matematice.

6. Se defineste un sir de variabile de tip String care va fi populat cu toate cartile dintr-un pachet de joc. Se vor extrage
aleator carti in pachet pana cand cartea curenta va fi de trefla cu valoarea mai mare decat 8. Sa se afiseze la fiecare pas
cartea curenta si numarul de carti deja extrase.
Indiciu: Folosiți un generator de numere aleatoare. Cartile deja extrase sunt eliminate.

7. Fie un algoritm de criptare în cadrul căruia se ia un text de intrare ‘A’ format din litere mici și mari. Separat se
definește un șir de caractere ”B” cărora li se asociază aleator câte un număr întreg de la 1 la 100. Algoritmul verifică dacă
literele din șirul B există în șirul A și face suma numerelor asociate acestora. La suma finală se adaugă pozițiile din șirul A
la care au fost găsite caracterele din șirul B. Dacă suma finală este mai mare de 100, criptarea a fost validă. Afișați un
mesaj corespunzător.

Exemplu:
Șirul A = ”aTmPpDsst”
Șirul B =”ams”
Valorile asociate elementelor din șirul B: 11 33 7

Suma: (11+33+7+7)+(1+3+7+8)=77 -> CRIPTARE NEVALIDĂ

8. Implementați jocul X-0 naiv ca și joc automat. Programul va selecta aleator la fiecare pas o poziție pe care o va
completa fie cu X, fie cu 0 în mod alternativ. Poziția selectată nu poate fi una completată deja. Jocul se termină atunci
când nu mai există casuțe libere sau când unul dintre jucători a obținut o linie, coloană sau diagonală completă. Afișați
pe ecran fiecare pas al algoritmului sub forma unei matrici, caracterul * va reprezenta o casuță necompletată. De ex:

X * *
* * *
* * *
--
X * *
* 0 *
* * *
--
X * *
* 0 *
X * *
--
X * 0
* 0 *
X * *

X * 0
X 0 *
X * *

Joc terminat!
--------
*Extindeți aplicația astfel încât dimensiunile tablei de joc să poată fi variabile.

Individual work

1. Write a Java application which defines an integer value and displays it as a binary, octal and hexadecimal string. Write
various bases convertion methods.
2. Implement the already known sorting algorithms (bubble sort, insertion sort, quick sort, etc.) and apply them upon an
array of integer variables read from the keyboard.

3. Read from the keyboard an integer value bigger than 16.777.216. Use bit masks for isolating each of the 4 bytes of the
read value. Display the initial and the isolated values as decimal, binary and hexadecimal strings.

4. Read from the keyboard the integer elements of a m x n matrix. Implement the methods that:
- display the matrix, line by line and column by column; consider the case in which the number of elements from each
line is bigger with 1 than the number of elements from the previous line;
- eliminate from the matrix (turns into 0) the values that are outside the interval defined by 2 specified limits;
- display the existent neighbour values of an element identified by its indexes (sent as parameters);

5. Develop a Java program that generates two random numbers and performs some mathematical operations with
them.

6. Define an array of String variables that will be populated with all the playing cards from a complete package. A series
of randomly picked cards will be extracted until the current card will have the clubs sign and a value greater than 8. At
each step, the current card and the number of already extracted cards will be displayed.
Hint: Use a random numbers generator. The cards which were already used are eliminated.

7. Assume that there is a cryptographic algorithm which takes an input text ‘A’ composed of lower and upper case
characters. Separately a character string ‘B’ is defined. Each character from B has an associated random interger value
between 1 and 100. The algorithm checks if the letters from B are found in A and adds the associated numerical values.
To the final sum value, the algorithm also adds the positions from string A where characters from string B were found. If
the final sum is larger than 100, the encryption was valid. Display a message with the result.
Example:
String A = ”aTmPpDsst”
String B =”ams”
Associated numerical values for string B: 11 33 7
Sum: (11+33+7+7)+(1+3+7+8)=77 -> INVALID ENCRYPTION

8. Implement the naive dots and crosses game (X-O) as an automated game. The application will randomly select at each
step a position from the board at which to place the next symbol, alternating between X and O. The selected position
cannot be an already filled square. The game ends when either there are no more empty squares on the board, or one
of the symbols wins by completing a line, a column or a diagonal. Display on the screen each step of the algorithm as a
matrix. Unfilled squares will be represented by the * character.
Example:
X * *
* * *
* * *
--
X * *
* 0 *
* * *
--
X * *
* 0 *
X * *
--
X * 0
* 0 *
X * *

X * 0
X 0 *
X * *

Game over!
--------
*Extend the application so that the dimensions of the board (number of rows and columns) can be changed.

S-ar putea să vă placă și