Creeaza.com - informatii profesionale despre


Evidentiem nevoile sociale din educatie - Referate profesionale unice
Acasa » referate » informatica » java
Siruri in Java

Siruri in Java


Curs

Siruri

In Java, un sir (vector) se declara ca si alte variabile, de obicei la inceputul unei clase sau metode. Un sir este un obiect si deci trebuie creat cu operatorul new pentru a crea o instanta a clasei array. Declaratia este similara celei din C/C++.



Exemple:

int []varsta;

String []a;

new int varsta[];

String a[];

Crearea se face astfel:

varsta = new int[6];

a = new String[4];

Ca si in C, sirul varsta contine 6 numere intregi, cu indici mergand de la 0 la 5.

Evident ca declararea si crearea se poate face intr-o singura instructiune:

int [] varsta = new int[6];

String [] a = new String[4];

Daca incercam sa accesam ,de exemplu, varsta[6] sau varsta[7], atunci vom obitine un mesaj de eroare (de altfel, programele Java stand-alone chiar isi opresc executia).

Citirea elementelor unui sir se poate face folosind un camp text:

varsta[3] = Integer.parseInt(campIntrare.getText());

a[3] = campIntrare.getText();

si afisarea:

g.drawString('varsta[0]='+varsta[0], 10, 10);

g.drawString('a[3]='+a[3], 10, 10);

In cazul aplicatiilor stand-alone, vom reveni la fisiere (este nevoie de tratarea exceptiilor).

Lungimea unui sir (sau numarul de elemente) al unui sir se poate obtine folosind variabila publica length (care nu se poate modifica).

Exemplu:

int [] a = new int[10];

int l;

l = a.length;

Odata creat un sir, nu mai putem sa-i schimbam lungimea. Ele au lungime fixa din momentul declararii si crearii lor.

Vom vedea mai tarziu ca Java pune la dispozitie si o structura de vectori expandabili (definiti in clasa Vector), a caror elemente se pot sterge si insera dupa declararea si crearea vectorului.

Sirurile se pot trimite ca parametri ca orice alt obiect.

Exemplu:

int [] a = new int[10];

total = suma(a);

unde metoda suma e definita astfel:

int suma(int [] sir)

Deoarece sirurile primite sunt de fapt niste obiecte, transmiterea lor ca parametri se face prin apel prin referinta. Deci cand un sir se transmite ca parametru unei metode, se trimite o referinta sirului. O referinta nu este o copie a sirului, dar un pointer catre sir. Deci cand o metoda schimba parametrul sir, acesta schimba si bucata din program apelata de metoda.

Exemplu:

int [] a = new int[10];

initializeazaZero(a);

si metoda este:

void initializeazaZero(int [] sir)

Se poate declara lungimea (initiala) a sirului folosind o constanta:

Exemplu:

final int Studenti = 15;

int [] medieStudent = new int [numarStudenti];

Initializarea unui sir

In momentul crearii unui sir in Java acesta se initializeaza cu ce se gaseste atunci in memorie la acele adrese.

Un mod de initializare (pentru siruri de lungime relativ mica) este enumerand pur si simplu elementele sale.

Exemplu 1:

int [] a=;

care este echivaent cu:

int [] a = new int[6];

a[0] = 23;

a[1] = 54;

a[2] = 96;

a[3] = 13;

a[4] = 7;

a[5] = 32;

Exemplu 2:

String [] v

Exemplu 3:

Alt mod este folosind o structura iterativa:

for(int i=0;i<10;i++)

a[i]=0;

Exemplu:

Acest exemplu contine un program pentru o situatie a ploilor dintr-o saptamana. Utilizatorul programului introduce o valoare intr-un camp text si apoi apasam mouse-ul si componenta sirului pentru a insera valoarea in sir. Este afisata suma numerelor din sir. Programul utilizeaza interfata MouseListener, deci va trebui sa suprascriem metodele din aceasta interfata (MouseClicked, mouseReleased, mousePressed, mouseEntered, mouseExited).

import java.awt.*;

import java.applet.*;

import java.awt.event.*;

public class Rainfall extends Applet implements ActionListener,

MouseListener

public void paint(Graphics g)

public void actionPerformed(ActionEvent event)

public void mouseClicked(MouseEvent event)

public void mouseReleased(MouseEvent event)

public void mousePressed(MouseEvent event)

public void mouseEntered(MouseEvent event)

public void mouseExited(MouseEvent event)

}

class Table

addValues();

g.drawString('Total rainfall is ' + sum, 100, 100);

}

public void selectComponent(int y)

catch (ArrayIndexOutOfBoundsException e)

}

public void setValue(int value)

public void addValues()

}

Siruri de obiecte

Sirurile pot tine orice -intregi, numere in virgula mobila, siruri de caractere, butoane, bare de defilare, orice obiect din bibilioteci sau construit de programator. Singura restrictie este ca obiectele din sir trebuie sa fie de acelasi tip.

Exemplu:

Vom ilustra un vector de 10 butoane, cate un buton pentru fiecare cifra.

Buton [] cifra = new Button[10];

In functia init(), acestea se initializeaza:

for(int b=0;b<10;b++)

Eticheta unui buton se poate obtine cu metoda getActionCommand care intoarce un String. Acest sir de caractere se converteste la un intreg folosind parseInt.

public void actionPerformed(ActionEvent eveniment)

Siruri bi-dimensionale

Sintaxa generala: tip [ ] numeSir = new tip[n1][n2];

unde n1 si n2 sunt literali intregi sau constante intregi.

Observatie: Echivalent, putem avea: tip numeSir[][] = new tip[n1][n2];

Exemple:

int [][] v = new int[4][7];

String sah[][] = new String[8][8];

float [][]temp = new float[10][24];


Citirea (initializarea) unui element se face analog ca la siruri unidimensionale.

Exemple:

v[2][3] = Integer.parseInt(campIntrare.getText());

sah [3][2] = 'calAlb';

temp[8][12] = 8.23f;

Lungimea unui sir bidimensional

Exemplu:

float [][] info = new float [20][40];

int numarLinii = info.length;

int numarColoane = info[0].length;

info[0][0]

info[0][1]

info[0][39]

info[1][0]

info[0][1]

info[1][39]

info[19][0]

info[19][1]

info[19][39]

Trimiterea sirurilor ca parametri

Dorim sa initializam un sir dimensional cu zerouri:

Exemplu:

int [][] v = new int[4][7]; //declaratia si definirea

initializeazaZero(v); //apelul functiei

public void initializeazaZero(int [][] sir)

Initializarea unui sir se poate face si din program:

Exemplu: int [ ] t=, };

Constante ca dimensiuni pentru siruri

Ca si sirurile uni-dimensionale, exista posibilitatea definirii unui sir folosind constante.

Exemplu:

final int numarLinii = 4;

final int numarColoane = 7;

int [][] a = new int[numarLinii][numarColoane];

In continuare, prezentam un exemplu de applet Java pentru completarea valorilor unei matrice folosind un camp TextField si MouseListener.

import java.awt.*;

import java.applet.*;

import java.awt.event.*;

public class Sales extends Applet implements ActionListener,

MouseListener

public void paint(Graphics g)

public void actionPerformed(ActionEvent event)

public void mouseClicked(MouseEvent event)

public void mouseReleased(MouseEvent event)

public void mousePressed(MouseEvent event)

public void mouseEntered(MouseEvent event)

public void mouseExited(MouseEvent event)

}

class Table

public int getYCurrent()

public Table(int rows, int columns)

public void display(Graphics g)

calculateSum();

g.drawString('Total is ' + sum, 100, 150);

}

}

public void selectComponent(int x, int y)

catch (ArrayIndexOutOfBoundsException e)

}

public void setValue(int value)

public void calculateSum()

}

Mai exista clasa Vector pentru procesarea sirurilor de lungime variabila! Nu intram in detalii !

Siruri de caractere

Tipul char este un tip primitiv, care memoreaza un caracter reprezentat pe 16 biti. Clasa String se ocupa de siruri de caractere. Compararea a doua siruri de caractere se face cu metoda equals din clasa String.

Exemplu:

String s='Ion';

if (s.equals('John'))

O alta clasa care se refera la procesarea intensiva a sirurilor de caractere este StringBuffer. Ea se ocupa de procesarea sirurilor de caractere de lungime variabila.

Daca se doreste afisarea unei ghilimele atunci se foloseste '. In continuare, vom prezenta o aplicatie care citeste un intreg dintr-un TextField si afiseaza in alta fereastra valoarea sa dubla.

import java.awt.*;

import java.applet.Applet;

import java.util.*;

import java.awt.event.*;

public class TryCatch extends Applet

implements ActionListener

public void actionPerformed(ActionEvent ev)

catch (NumberFormatException e)

}

}

}

Metode din clasa String (java.lang.String)

public boolean equals(Object unObiect);

public boolean equalsIngoreCase(String altSir);

Exemplu:

sir='ion';

if (sir.equalsIngoreCase('Ion'))

public int compareTo(String altSir) -returneaza zero daca cele 2 siruri sunt egale, valoare negativa daca sirul obiect precede sirul parametru, o valoare pozitiva daca sirul obiect urmeaza sirului parametru.

Exemplu:

int n='abc'.compareTo('ade'); //n este -2! De ce?

if (n==0)

rezultat = 'sirurile sunt egale';

else

if (n<0)

rezultat = 'sir1<sir2';

else

rezultat = 'sir1>sir2';

public String replace(char caracterVechi, char caracterNou); - inlocuieste in sirul obiect orice aparitie a lui caracterVechi cu caracterNou.

Exemplu:

sir='mama'.replace('m','t') //sir='tata'

public String toLowerCase(); -converteste orice litera in litera minuscula a sirului obiect

public String trim() -sterge spatiile de la capetele unui sir de caractere, inclusiv n, t

Exemplu:

String sir1=' Un exemplu n';

String sir2=sir1.trim(); //sir2 devine 'Un exemplu'

public int length() -intoarce numarul de caractere dintr-un sir obiect

Exemplu:

int n = 'Programarea in Java'.length(); //n va fi 18

Reamintim ca un sir obisnuit avea o data numita length (si nu metoda).

public String substring(int indexStart, int indexSfarsit); //extrage din sirul obiect partea specificata. Prima pozitie a unui sir este 0 si ultimul caracter ale indexul length()-1.

Exemplu:

sir1='pozitie';

sir2=sir1.substring(2,4); //sir2='zi'

public char charAt(int index); //intoarce caracterul de la pozitia precizata

Exemplu:

c = 'pozitie'.charAt(5); //c devine 'i'

c = 'pozitie'.charAt(1); //c devine 'o'

public int indexOf(String sir, int indexStart); -determina indexul de la care se gaseste sir in situl obiect incepand de la pozitia indexStart. Daca nu este gasit, atunci se returneaza -1. Mai exista inca trei forme

supraincarcate ale acestei metode.

Exemplu:

int n='abcdabcd'.indexOf('bc',0); //n devine 5

public boolean endsWidth(String sufix); intoarce true daca sufix termina sirul obiect

Exemplu:

boolean e ='abcdabcd'.endsWith('bcd'); //e va ti true

Clasa StringTokenizer (java.util.StringTokenizer)

public StringTokenizer(String sir);

creeaza un obiect din clasa StringTokenizer care imparte sirul dat folosind caracterele de delimitare standard (space, r, t, n)

public StringTokenizer(String sir, String delimitator) creeaza un obiect din clasa StringTokenizer care imparte sirul dat folosind caracterele din sirul delimitator

Exemplu:

String data ='06 / 22 / 30';

String luna, zi, ora, min;

StringTokenizer d = new StringTokenizer(data,' /');

public String nextToken() -metoda intoarce urmatorul sir (token=atom lexical)

public String nextToken(String delimitator) -seteaza caractere delimitatori la caracterele din sirul dat si returneaza urmatorul token (atom lexical);

Exemplu: (continuare)

luna = d.nextToken(); //luna='06'

zi = d.nextToken(); //zi='22'

ora = d.nextToken(); //ora='12'

min = d.nextToken(' :'); //min='30'

public boolean hasMoreTokens() -returneaza true daca mai exista date care se pot unifica cu nextToken()

Exemplu:

String exemplu ='4 ,7, 10, 15 ,20';

String element;

StringTokenizer listaNumere = new StringTokenizer(exemplu,' ,');

while (listaNumere.hasMoreTokens())

Conversii intre siruri

Una dintre cele mai importante metode de conversie dintre tipuri arbitrare si String este toString(), are 39 de variante supraincarcate. Exista de asemeni, un numar de metode de parsare care convertesc sirurile de caractere intr-o varietate de tipuri.

Am vazut ca tipurile predefinite int, float, double, long, boolean, char nu necesita crearea instantelor cu operatorul new. Pentru uniformizare, exista clasele 'wrapper' asociate tipurilor predefinite: Integer, Float, Double, Long, Boolean, Character.

Java pune la dispozitie:

toString() -converteste o valoare de un anumit tip in String

parseInt, parseLong, valueOf -converteste o valoare de tip String la Integer, Long

floatValue -converteste un tip wrapper la un tip predefinit

Exemple:

1. conversie int->String:

int n=123;

String s = Integer.toString(n); //sirul s devine 123

2. conversie float->String:

float f=12.34f;

String s = Float.toString(f); //s devine '12.34'

3. conversie String->int

String s='1234';

int n=Integer.parseInt(s); //n devine 1234

4. conversie String->float

String s='12.34';

Float temp=Float.valueOf(s); //nu exista parseFloat

float f=temp.floatValue(); //f devine 12.34

Exercitii propuse spre implementare

1. Scrieti un program care foloseste un sir de 10 caractere. Scrieti metode pentru:

citirea de la tastatura (folosind un camp text) a componentelor sirului

afisarea valorilor sirului

citirea unui cuvant de la tastatura si cautarea lui in vectorul nostru

sortarea elementelor vectorului in ordine crescatoare;

2. Scrieti o clasa care contine o metoda de desenare a graficului unei functii date printr-un sir de coordonate. Ea are antetul:

public void deseneazaGrafic(float []x, float[] y)

Desenati axele de coordonate, iar unitatea de masura se alege scaland-o astfel incat graficul sa incapa in applet.

3. Generarea permutarilor

4. Scrieti un progra care citeste intr-un TextField expresii de tip float, impreuna cu operatiile de + si - (12.34+45.67-34.02). Intr-un alt TextField se va afisa rezultatul.





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.