Īntrebări recapitulative

 

Notă. Īntrebările numerotate cu verde se referă la examenul parţial.

 

Īntrebările pentru examenul final īncep  aici

 

1. Explicaţi termenul abstractizarea datelor.


2. Care sunt beneficiile date de tipurile de date abstracte?

 

3. Ce face operatorul Java <<< ?

 

4. Īn ce constă paradigma orientării pe obiecte?


5. Explicaţi punctele tari ale orientării pe obiecte.


6. Ce este o abstracţiune?


7. Ce sunt obiectele software?


8. Ce sunt capabilităţile unui obiect?


9. Ce feluri de capabilităţi se pot defini?


10. Ce sunt proprietăţile unui obiect?

 

11. Ce feluri de proprietăţi se pot defini?


12. Cum se poate obţine o aplicaţie Java de sine stătătoare?


13. Ce constituie starea unui obiect?


14. Explicaţi termenul de clasă a obiectului.

 

15. Care este rolul īncapsulării?

 

16. Explicaţi termenii vedere publică şi vedere privată īn legătură cu notiunea de clasă.

17. Explicaţii abstracţiunea compoziţie.

 

18. Explicaţi cum se poate ajunge de la un TDA la cod īn Java.


19. Explicaţi paşii necesari pentru a ajunge la cod sursă Java la execuţia programului corespunzător.

 

20. Ce este o aplicaţie Java de sine stătătoare?

21. Ce este un applet Java?

 

22. Ce rol īndeplineşte īncărcătorul de clase Java?


23.
Explicaţi efectul modificatorilor de acces asupra variabilelor/metodelor.


24.
Daţi exemple de nume de variabile, metode, clase şi constante care se supun convenţiei de nume prezentate la curs.

25. Care sunt tipurile primitive īn Java?

 

26. Detaliaţi compatibilitatea la atribuire pentru tipuri primitive īn Java.

26. Ce este conversia de tip explicită (type casting)? Furnizaţi 2-3 exemple relevante.


27. Ce tipuri au clasele īnvelitoare (wrapper) şi care sunt numele corespunzătoare claselor primitive?


28. Ce este boxing şi un-boxing?


29. Ce feluri de comentarii se pot folosi īn programele Java?


30. Ce trebuie folosit la compararea conţinutului obiectelor?


31. Daţi un exemplu de eroare de depăşire de capacitate īn Java.


32. Care este efectul lui break cu etichetă?

 

33. Care este efectul lui continue cu etichetă?

 

34. Explicaţi şi exemplificaţi termenul de constructor īn Java.


35. Explicaţi şi exemplificaţi termenul de method īn Java.

 

36. Ce constituie intrarea şi ieşirea pentru o metodă?


37. Prezentaţi un model de folosit la scrierea unei clase.


38. De ce este util să se supraīncarce (overload) constructorii?


39. Ce poate fi un operand īntr-o expresie Java?


40. Ce fel de expresie poate fi folosită īntr-o instrucţiune if?

 

41. Care sunt operatorii relaţionali?

 

42. Scrieţi o expresie de relaţie care să se evalueze la adevărat dacă suma variabilelor x şi y este egală cu valoarea variabilei z.

 

43. Puneţi paranteze īn expresiile logice care urmează pentru a indica ordinea de evaluare a operatorilor. Dacă a e 5, b e 10, c e 15 şi d e 0, care sunt valorile de adevăr ale expresiilor?

c == a+b

a != 7

b <= a

a > 5

a+d >= c-b

d/a < c*b

 

44. Puneţi paranteze īn expresiile logice care urmează pentru a indica ordinea de evaluare a operatorilor. Dacă a e 5, b e 10, c e 15 şi d e 0, care sunt valorile de adevăr ale expresiilor?

c == a+b || c == d

a != 7 && c >= 6 || a+c <= 20

!(b <= 12) && a % 2 == 0

!(a >5) || c < a+b

 

 

45. La ce se evaluează următoarele expresii?

     17/3  17%3  1/2  1/2*(x+y)

 

46. Date fiind declaraţiile:

float x;

int k, i = 5, j = 2;

Ce valori vor avea x şi k īn urma atribuirilor următoare:

k = i/j;

x = i/j;

k = i%j;

x = 5.0/j;

 

47. Dacă x are valoarea 3.5, atunci la execuţia următoarei porţiuni de cod, ce se atribuie lui y?

if (x + 1 <= 3.6)

   y = 1.0;

else

   y = 2.0;

 

48. Exprimaţi īn cuvinte care credeţi că este efectul intenţionat al următoarei secvenţe de cod? De ce nu este corect sintactic? Cum se poate modifica pentru a fi corect? Ceea ce aţi modificat are efectul pe care l-aţi declarat?

if (x >= y)

   sum += x;

   System.out.println("x is bigger");

else

   sum += y;

   System.out.println("y is bigger");

 

49. Scrieţi o instrucţiune if-else care să adune variabila x la variabila possum dacă x e pozitiv şi la negsum dacă x este negativ.

 

50. Extindeţi soluţia īntrebării precedente astfel īncāt, dacă x este pozitiv atunci să se incrementeze variabila poscount, iar dacă x este negativ, să se incrementeze variabila negcount. Dacă aceasta ar fi parte a unui program, ce iniţializări ar trebui făcute?

 

51. S-a decis să se bazeze amenda pentru depăşirea limitei de viteză īntr-o zonă locuită după cum urmează - 50 RON pentru viteze īntre 55 şi 70 km/h, 75 RON pentru viteze īntre 71 şi  80 km/h, şi 100 RON pentru viteze peste 80 km/h. Un programator a scris următorul cod pentru a implementa ideea::

if (speed > 55)

   amenda = 50;

else if (speed > 70)

   amenda = 75;

else if (speed > 100)

   amenda = 100;

Este corect? Ce amendă s-ar da pentru 102km/h? Dacă nu e corect, cum ar trebui scris?

 

52. Scrieţi o instrucţiune if-else imbricată care să atribuie o literă reprezentānd evaluarea pentru o notă exprimată īn procente, după cum urmează - 70 sau peste: A, 60-69: B, 50-59: C, 40-49: D, 30-39: E, mai puţin de 30: F.

 

53. Care este diferenţa esenţială īntre o buclă while şi una do-while?

 

54. Ce scrie următorul segment de cod Java?

int i;

i = -12;

do

  {

   System.out.println( i );

    i = i - 1;

  }

while (i > 0)

 

55. Ce scrie următorul segment de cod Java?

int i;

for ( i = 1; i <= 12; i *= 2 )

   System.out.println( i );

 

56. Ce tipăreşte următorul segment de cod Java?

int i;

for (i=1; i<20; i = i+3)

   System.out.println( i );

 

57. Ce s-ar īntāmpla dacă i+3 din expresia de actualizare ar fi īnlocuit prin i-3?


58. Īntregul x are valoarea binară (stocată pe 1 octet/byte) 10011100. Ce valoare binara va avea  z după executarea instrucţiunilor:

int y = 1 << 7;

int z = x & y;

59. Ce se intāmplă dacă compilăm şi executăm aplicaţia care conţine fragmentul de cod următor īn metoda sa main():

String s = new String( "Computer" );
if( s == "Computer" ) 
        System.out.println( "Equal A" );
if( s.equals( "Computer" ) )
        System.out.println( "Equal B" );

60. Fie clasa:

class MyPoint 
{  
   void myMethod()
   { 
      int x, y;
      x = 5; y = 3;
      System.out.print( " ( " + x + ", " + y + " ) " );
      switchCoords( x, y );
      System.out.print( " ( " + x + ", " + y + " ) " );
   }
   void switchCoords( int x, int y ) 
   { 
      int temp;       temp = x;
      x = y;
      y = temp;
      System.out.print( " ( " + x + ", " + y + " ) " );
   }
}

Ce se tipăreşte la execuţia metodei myMethod()?

61. Dacă
arr[] conţine doar valori īntregi pozitive, ce face funcţia următoare?

public int guessWhat( int arr[] )
{ 
   int x= 0;
   for( int i = 0; i < arr.length; i++ ) x = x < arr[i] ? arr[i] : x;
   return x;
}

 

62. Fie fragmentul:

arr[0] = new int[4];
arr[1] = new int[3];
arr[2] = new int[2];
arr[3] = new int[1];
for( int n = 0; n < 4; n++ )
System.out.println( /* what goes here? */ );

Cu ce expresie trebuie īnlocuit /* what goes here? */ pentru a tipări numărul de elemente din fiecare rānd?

 
63. Dacă size = 4, carătaţi conţinutul rānd cu rānd al tabloului triArray:
int[][] makeArray( int size) 
{ 
   int[][] triArray = new int[size] [];
   int val=1;
   for( int i = 0; i < triArray.length; i++ ) 
   { 
      triArray[i] = new int[i+1];
      for( int j=0; j < triArray[i].length; j++ )
        triArray[i][j] = val++;
   }
   return triArray;
}

64. Fie fragmentul de cod:
public static void main( String args[] )
{ 
   int a = 5;
   System.out.println( cube( a ) );
}
int cube( int theNum )
{
   return theNum * theNum * theNum;
}

Ce se īntāmplă dacă īncercaţi să compilaţi şi să executaţi codul dat?
65.  Ce va tipări codul care urmează dacă val = 1?
switch( val )
{ 
   case 1: System.out.print( "P" );
   case 2:
   case 3: System.out.print( "Q" );
      break;
   case 4: System.out.print( "R" );
   default: System.out.print( "S" );
}
66.  Ce se va tipări la executarea fragmentului de cod următor?
outer:
for(int i = 1; i <3; i++ )

{

   inner: for( j = 1; j < 3; j++ )

   {

      if( j==2 ) continue outer;

      System.out.println( "i = " +i + ", j = " + j );

   }

}

67. Ce expresie se foloseşte īn Java pentru a reprezenta numărul de elemente dintr-un tablou numit arr ?

 

68. Ce va returna metoda substring(2, 4) invocată pe obiectul String "exemplu"? Puneţi rezultatul īntre ghilimele īntrucāt este de tipul String..
 

69. Ce va fi tipărit la execuţia următoarei secvenţe de cod Java?

public static void main(String args[]) 
{
      int i, j=1;
      i = (j > 1)? 2: 1;
      switch(i) {
        case 0: System.out.println(0); break;
        case 1: System.out.println(1);
        case 2: System.out.println(2); break;
        case 3: System.out.println(3); break;
      }
   }
}
 
70. Ce se īntāmplă la apelul unei metode Java?
 
71. Ce se īntāmplă la invocarea operatorului Java new?
 
72. Ce se īntāmplă la execuţia porţiunii de cod Java care urmează?
BigDecimal big1 = new BigDecimal("1"); 
BigDecimal big2 = new BigDecimal("2");

big1 = big2;
 
73. Codul următor este corect şi complet? De ce? 
public int sum2(int[] data)
{
  int sum = 0;
  for (int i = 0; i <= data.length; i++)
    sum += data[i];
}
 
74. Prin ce diferă un String de un tablou de caractere? 
 
75. Ce este o interfaţă Java?

76. Prin ce diferă o interfaţă (interface) de o clasă (class)?  
 
77. Descrieţi cele două componente ale definiţiei unei interfeţe. 
 
78. Descrieţi restricţiile care se aplică interfeţelor Java.

79. Īn ce scopuri este indicat a se folosi interfeţe īn Java? 
80. Care este scopul pachetelor Java? 
 
81. Ce sunt variabilele locale īn Java? 
82. Ce sunt variabilele instanţă īn Java? 
83. Ce sunt variabilele la nivel de clasă īn Java? 

84. La ce valoare se evaluează expresia următoare? 
-4 >>> 26
 
85. Care sunt diferenţele īntre metode şi constructori ?

 

86. Explicaţi de ce secvenţa următoare este corectă sau incorectă

short s = 20;

char c = s;

87. Explicaţi de ce secvenţa următoare este corectă sau incorectă

byte b = 20;

char c = b;

88. Explicaţi de ce secvenţa următoare este corectă sau incorectă

short s1 = 10;

short s2 = 20;

short result = s1*s2;

 

89. Fiind dată declaraţia de clasă

public class MyClass

{

  public static void main(String arg)

  {

    MyClass mc = new MyClass( );

    System.out.println("First Argument is  : "+arg[0]);

  }

}

Ce se īntāmplă la īncercarea de a compila şi rula MyClass?

 

90. Ce se īntāmplă dacă īncercaţi să compilaţi şi să executaţi codul care urmează:

public class MyClass{

  static int i = 10;

 

  public static void main(String[] arg){

        static int i = 20;

        System.out.println("i is :"+i);

  }

}

 

91. Cāte obiecte String sunt create la execuţia fragmentului următor? Motivaţi răspunsul dat.

String s1,s2,s3,s4;

s1 = "Hello";

s2 = s1;

s3 = s2 + "Pal";

s4 = s3;

 

92. Ce se tipăreşte la execuţia fragmentului de cod care urmează? De ce?

 

int i = 10; 

long l = 10L;

if( i == l )

   System.out.println("We are Equal");

 

93. Ce se tipăreşte la execuţia fragmentului de cod care urmează? De ce?

 

int i = 10;

char c = 10;

if( c == i)

   System.out.println("We are Equal");

 

94. Ce se tipăreşte la execuţia fragmentului de cod care urmează? De ce?

 

String s1 = "Null";

String s2 = "Null";

if( s1 == s2)

  System.out.println("We are Equal");

 

95. Ce se tipăreşte la execuţia fragmentului de cod care urmează? De ce?

 

String s1 = "Null";

String s2 = new String(s1);

if( s1 == s2)

  System.out.println("We are Equal");

 

96. Ce se tipăreşte la execuţia fragmentului de cod care urmează? De ce?

 

String s1 = "OK";

String s2 = new String(s1);

if( s1.equals(s2))

  System.out.println("We are Equal");

 

97. Ce se tipăreşte la execuţia fragmentului de cod care urmează? De ce?

Boolean b1 = new Boolean(true);

Boolean b2 = new Boolean(true);

if(b1.equals(b2))

  System.out.println("We are Equal");

 

98. La ce valori se iniţializează variabilele locale?

 

99. Ce se īntāmplă dacă īncercaţi să compilaţi şi să executaţi codul care urmează, folosind comanda:
java test 2

public class test {

   public static void main(String args[]) {

      Integer intObj=Integer.valueOf(args[args.length-1]);

      int i = intObj.intValue();

 

      if(args.length > 1)

         System.out.println(i);

      if(args.length > 0)

         System.out.println(i - 1);

      else

         System.out.println(i - 2);

   }

}

       

100. Ce număr de octeţi este folosit la stocarea tipului primitiv Java long?

 

101. Ce număr de octeţi este folosit la stocarea tipului primitiv Java char?

 

102. Ce număr de octeţi este folosit la stocarea tipului primitiv Java double?

 

103. Care este rezultatul evaluării expresiei 14 ^ 23?

 

104. Ce se īntāmplă dacă īncercaţi să compilaţi şi să executaţi codul care urmează:

public class test {
   public static void main(String args[]) { 
      int i, j=1;
      i = (j>1)?2:1;
      switch(i) {
        case 0: System.out.println(0); break;
        case 1: System.out.println(1);
        case 2: System.out.println(2); break;
        case 3: System.out.println(3); break;
      }
   }
}

 

105. Ce se īntāmplă dacă īncercaţi să compilaţi şi să executaţi codul care urmează:

public class test {
   public static void main(String args[]) { 
      int i=0, j=2;
      do {
         i=++i;
         j--;
      } while(j>0);
      System.out.println(i);
   }
}

 

106. Ce se īntāmplă dacă īncercaţi să compilaţi şi să executaţi codul care urmează:

public class test {

    public static void main(String args[]) {

    String s1 = "abc";

    String s2 = "abc";

    if(s1 == s2)

        System.out.println(1);

    else

        System.out.println(2);

    if(s1.equals(s2))

        System.out.println(3);

    else

        System.out.println(4);

    }

}

       

107. Cum ne putem asigura că memoria alocata unui obiect va li eliberată?

 

108. Ce se īntāmplă dacă īncercaţi să compilaţi şi să executaţi codul care urmează:

public class test {

   public static void main(String args[]) {

      String str1="abc";

      String str2="def";

      String str3=str1.concat(str2);

 

      str1.concat(str2);

      System.out.println(str1);

   }

}

 

109. Ce metodă din clasa Integer se poate folosi pentru a converti un obiect Integer la tipul primitiv int?

 

110. Ce se īntāmplă dacă īncercaţi să compilaţi şi să executaţi codul care urmează:

public class Test

{
    static int age;
    public static void main (String args [])

   {
        age = age + 1;
       System.out.println("The age is " + age);
   }
}

 

111. Ce se īntāmplă la īncercarea de compilare şi execuţie a codului de mai jos ?

public class Test

{
    static int total = 10;
    public static void main (String args [])

    {
       new Test();
    }
    public Test ()

   {
       System.out.println("In test");
       System.out.println(this);
       int temp = this.total;
        if (temp > 5)  System.out.println(temp);
   }

}

 

112. Scrieţi o instrucţiune care să iniţializeze tabloul de String temp cu şirurile "a", "x", "axe".

 

113. Īn ce situaţii se obţine un constructor implicit?

 

114. Pentru fragmentul următor, care este efectul faptului că a este 5:
public class Test

{
   public void add(int a)

   {
     loop: for (int i = 1; i < 3; i++)

     {
        for (int j = 1; j < 3; j++)

        {
          if (a == 5)

          {
             break loop;
          }
          System.out.println(i * j);
        }
     }
   }
}
http://www.4tests.com/images/siteimages/b.gif

 

115. Pentru fragmentul următor, care este efectul faptului că a este 5:
public class Test

{
   public void add(int a)

   {
     loop: for (int i = 1; i < 3; i++)

     {
        for (int j = 1; j < 3; j++)

        {
          if (a == 5)

          {
             continue loop;
          }
          System.out.println(i * j);
        }
     }
   }
}
http://www.4tests.com/images/siteimages/b.gif

 

116. Care este rezultatul execuţiei următorului fragment de cod Java atunci cānd valoarea lui x este 2:
switch (x)

{
case 1:
    System.out.println(1);
case 2:
case 3:
   System.out.println(3);
case 4:
   System.out.println(4);

} http://www.4tests.com/images/siteimages/b.gif

 

117. Care este rezultatul execuţiei următorului fragment de cod Java:
boolean flag = false;
if (flag = true)

{
   System.out.println("true");
}

else

{
    System.out.println("false");
}

118. Potrivit recomandărilor, cāte clase publice se pot declara īntr-un fişier sursă?

 

119. La ce se referă termenul ascunderea informaţiei?

 

120. Scrieţi o metodă care să aloce un tablou de 3 pe 5 de valori reale īn dublă precizie şi să initializeze elementele tabloului la o zecime din valoarea rāndului īnmulţită cu coloana pentru fiecare element.

 


 

Īntrebări/exerciţii pentru examenul final

 

 

  1. Care sunt diferenţele īntre compoziţie şi moştenire?

 

  1. Ce este polimorfsmul. Daţi un exemplu scurt.

 

  1. Care este diferenţa īntre suprascriere (overriding) şi supraīncărcare (overloading). Daţi exemple scurte.

 

  1. Fiind date clasele A, B şi C, unde B extends A şi C extends B, şi unde toate clasele implementează metoda de instanţă void doIt() . Cum se poate invoca dintr-o metodă de instanţă din C metoda doIt() din A? De ce?

 

  1. Care va fi rezultatul compilării şi executării următorului program?

// Filename: MyClass. java

public class MyClass {

  public static void main(String[] args) {

    C c = new C();

    System.out.println(c. max(13, 29));

  }

}

class A {

  int max(int x, int y) { if (x>y) return x; else return y; }

}

class B extends A{

  int max(int x, int y) { return super.max(y, x) - 10; }

}

class C extends B {

  int max(int x, int y) { return super.max(x+10, y+10); }

}

 

  1. Scrieţi cea mai simplă expresie care, inserată īn zona marcată cu (1), şa facă programul să tipărească cāmpul text din clasa Message?

// Filename: MyClass.java

class Message {

     // The message that should be printed:

  String text = "Hello, world! ";

}

class MySuperclass {

  Message msg = new Message() ;

}

public class MyClass extends MySuperclass {

  public static void main(String[] args) {

    MyClass object = new MyClass();

    object.print();

  }

  public void print() {

    System.out.println( /* (1) WRITE THIS COMPLETED STATEMENT */ ) ;

  }

}

 

  1. Scrieţi declaraţiile de metode care trebuie puse īn zona (7), astfel īncāt programul să se compileze.

class MySuperclass {

  public        Integer step1(int i)     { return 1; }     // (1)

  protected     String  step2(String str1, String str2) { return str1; }  // (2)

  public        String step2(String str1)    { return str1; }  // (3)

  public static String step2()        { return "Hi "; }  // (4)

  public MyClass      makeIt() { return new MyClass(); }           // (5)

  public MySuperclass makeIt2() { return new MyClass(); }          // (6)

}

public class MyClass extends MySuperclass {

  // (7) WRITE THIS METHOD DECLARATION

}

 

  1. Care va fi rezultatul compilării şi executării următorului program?

class Vehicle {

  static public String getModelName() { return "Volvo"; }

  public long getRegNo() { return 12345; }

}

class Car extends Vehicle {

  static public String getModelName() { return "Toyota"; }

  public long getRegNo() { return 54321; }

}

public class TakeARi de {

  public static void main(String args[]) {

    Car c = new Car();

    Vehi cle v = c;

    System.out.printl n("| " + v.getModelName() + "| " + c. getModel Name() +

  "| " + v.getRegNo() + "| " + c. getRegNo() + "| ");

  }

}

 

 

  1. Care va fi rezultatul compilării şi executării următorului program?

final class Item {

  Integer size;

  Item(Integer size) { this. size = size; }

  public boolean equals(Item item2) {

    if (this == item2) return true;

    return this.size.equals(item2.size);

  }

}

public class SkepticRide {

  public static void mai n(String[] args) {

    Item itemA = new Item(10);

    Item itemB = new Item(10);

    Object itemC = itemA;

    System.out.printl n("| " + itemA.equal s(itemB) +

      "| " + itemC.equal s(itemB) + "| ") ;

  }

}

 

  1. Ce constructori trebuie inseraţi in zona marcată cu (1) īn MySub astfel ca programul să se compileze?

class MySuper {

  int number;

  MySuper(int i) { number = i ; }

}

class MySub extends MySuper {

  int count;

  MySub(int count, int num) {

    super(num);

    this.count = count;

  }

  // (1) WRITE CONSTRUCTOR NEEDED At THIS POINT

}

 

  1. Ce va tipări la execuţie următorul program?

// Filename: MyClass.java

public class MyClass {

  public static void main(String[] args) {

    B b = new B("Test");

  }

}

class A {

  A() { this("1", "2"); }

  A(String s, String t) { this(s + t); }

  A(String s) { System.out.printl n(s); }

}

class B extends A {

  B(String s) { System.out.printl n(s); }

  B(String s, String t) { this(t + s + "3"); }

  B() { super("4"); };

}

 

12.  Consideraţi următoarele definiţii de clase

class X {

  public double g(double x) {

    return f(x) * f(x);

  }

  public double f(double x) {

    return x + 1.0;

  }

}

 

class Y extends X {

  public double f(double x) {

    return x + 2.0;

  }

}

Ce va tipări următoarea secvenţă de instrucţiuni?

Y y = new Y();

X x = y;

System.out.println(y.f(2.0));

System.out.println(x.f(2.0));

System.out.println(x.g(2.0));

 

13.  Presupuneţi ca cineva execută metoda run() următoare şi introduce numerele 5 şi 22.

public static void run() {

    int a = IO.readInt();

    int b = IO.readInt();

 

    int m = 0;

    int n = b;

    while(m < n) {

        m += a;

        n -= a;

    }

    System.out.println(m - n);

}

Arătaţi toate valorile asumate de variabilele programului.

a

b

m

n

Ce tipăreşte metoda?

 

  1. Completaţi metoda la nivel de clasă de mai jos astfel īncāt să citească două şiruri introduse de către utilizator şi să afişeze "yes"' dacă al doilea şir conţine doar caractere din primul şi "no" īn caz contrar. Spre exemplu, să se poată executa metoda cu următorul rezultat (literele aldine arată ce tastează utilizatorul) :

brillig glib

yes

Sau, pentru o altă intrare:

brillig broil

no

public static void run() {

 

 

 

}

Pentru a scrie, puteţi găsi ca folositoare următoarele metode de instanţă din  clasa String.

int length()

Returnează numărul de caractere din şirul ţintă.

char charAt(int i)

Returnează caracterul aflat la indexul i. Spre exemplu, dacă str conţine şirul brillig, str.charAt(2) returnează caracterul 'i'.

int indexOf(String s)

Returnează indexul unde apare prima dată s oīn şirul a cărui metodă este invocată. Dacă s nu apare nicăieri īn şirul ţintă, metoda returnezaă -1.

 

15.  Scrieţi definiţia unui nou tip , numit IntRange, care reprezintă un interval de numere īntregi. Clasa trebuie să suporte următoarele metode de instanţă:

IntRange(int start, int end)

(Constructor) Construieşte un nou obiect IntRange care reprezintă setul de īntregi cuprinşi īntre start şi end, interval īnchis. Metoda poate rpesupune că  primul parametru este <= cu cel de al doilea.

int getSize()

Returnează numărul de īntregi din interval.

boolean contains(int i)

Returnează true dacă i se află īn interval

Metoda exemplu următoare, care foloseşte clasa IntRange, ilustrează cum funcţionează clasa de definit.

public static void run() {

    IntRange range = new IntRange(2, 4);

    System.out.println(range.getSize());         // this prints ``3''

    System.out.println(range.contains(1));       // this prints ``false''

    System.out.println(range.contains(3));       // this prints ``true''

    System.out.println(range.contains(4));       // this prints ``true''

    System.out.println(range.contains(5));       // this prints ``false''

}

public class IntRange {

 

 

 

}

 

  1. Presupunem că avem următoarele definiţii de clase

class A {

  public int f(int x) {

    return 2 * x;

  }

  public int g(int x) {

    return f(x * 3);

  }

}

class B extends A {

  public int f(int x) {

    return 5 * x;

  }

  public int h(int x) {

    return f(7 * x);

  }

}

Şi că executăm metoda următoare:

public static void run() {

  B b = new B();

  System.out.println(b.f(1) + " " + b.g(1) + " " + b.h(1));

  A a = b;

  System.out.println(a.f(1) + " " + a.g(1));

}

Ce se va tipări?

 

  1. Definiţi o clasă numită PassCount care să ţină evidenţa studenţilor dintr-o grupă, care au trecut un test. Sunt necesare metodele:

PassCount()

(Constructor) Construieşte un obiect reprezentānd o grupă goală.

void addGrade(double grade) Adaugă grade in grupă.

boolean isAnyFailing() Returnează true doar dacă cineva din grupă a primit un procentaj sub 60.

De exemplu, dacă aţi definit clasa īn mod corespunzător, atunci se poate scrie următoarea clasă pentru a testa:

public class PassCountTest {

public static void run() {

PassCount a = new PassCount();

addGrade(45.0);

addGrade(76.0);

System.out.println(a.isAnyFailing()); // should print "true"

 

PassCount b = new PassCount();

addGrade(60.0);

System.out.println(b.isAnyFailing()); // should print "false"

}

}

Observaţi că, pentru a realiza acest lucru, un obiect PassCount nu are nevoie să păstreze fiecare procentaj --- adică nu e nevoie de tablouri: doar trebuie să ştie dacă cineva a luat sub 60.

 

  1. Definiţi clasa NumberIterator care să itereze peste o secvenţă de numere. Trebuie să aibă următoarele metode:

NumberIterator(int start, int stop)

(Constructor) Construieşte un obiect pentru a itera peste īntregii crescători de la start la stop. Constructorul presupune că start < stop.

boolean hasMoreNumbers()

Returnează true dacă mai există numere īn secvenţă.

int nextNumber()

Returneză numărul curent din secvenţă şi avansează iteratorul, astfel că următorul apel de metodă returnează următorul număr din secvenţă. Metoda aruncă o NoSuchElementException dacă nu mai sunt elemente īn secvenţă.

Exemplu de utilizare a clasei – la execuţia metodei run() se va tipări "5 6 7 8".

public class NumberIteratorTest {

    public static void run() {

        NumberIterator it = new NumberIterator(5, 8);

        System.out.print(it.nextNumber());

        while(it.hasMoreNumbers()) {

            int i = it.nextNumber();

            System.out.print(" " + i);

        }

    }

}

 

  1. Presupunem că avem următoarele definiţii de clase

class P {

  public int f(int x) {

    return x + 1;

  }

  public int g(int x) {

    return f(x + 2);

  }

}

class Q extends P {

  public int f(int x) {

    return x + 4;

  }

  public int h(int x) {

    return f(x + 8);

  }

}

Şi că executăm metoda următoare:

public static void run() {

  P a = new P();

  Q b = new Q();

  P c = b;

  System.out.println(a.f(0) + " " + a.g(0));

  System.out.println(b.f(0) + " " + b.g(0) + " " + b.h(0));

  System.out.println(c.f(0) + " " + c.g(0));

}

Ce va tipări metoda?

 

  1. Presupunem că avem clasa definită mai jos:

class C {

    static int y = 0;

    int z;

 

    C() {

        z = 0;

    }

    void incrX() {

        int x = 0;

        x++;

        IO.println(x);

    }

    void incrY() {

        y++;

        IO.println(y);

    }

    void incrZ() {

        z++;

        IO.println(z);

    }

}

public class Example {

    public static void run() {

        C a = new C();

        C b = new C();

        a.incrX();

        a.incrX();

        b.incrX();

        a.incrY();

        a.incrY();

        b.incrY();

        a.incrZ();

        a.incrZ();

        b.incrZ();

    }

}

Ce va tipări calculatorul la execuţia metodei run() din clasa Example?

 

  1. O matrice sete simetrică dacă pentru oricare i şi j, ai,j = aj,i. Un exemplu de matrice simetrică:

0

23

45

23

10

36

46

36

20

Alt mod de definire: o matrice simetrică poate fi reflectată peste diagonală principală şi se obţine aceeaşi matrice.

Completaţi metoda care urmează astfel ca să returneze true doar dacă parametul său mat reprezintă o matrice simetrică. Soluţia poate presupune că matricea este pătrată.

public static boolean isSymmetric(int[][] mat) {

 

 

 

}

(Soluţia nu trebuie să fie chiar atāt de lungă!)

 

  1. Definiţi clasa PigPen care să ţină evidenţa porcilor dintr-o cocină. Trebuie să suporte următoarele metode:

PigPen(int pigs)

(Constructor) Constructieşte un obiect care reprezintă o cocină cu pigs porci.

boolean isEmpty()

Returnează true dacă nu sunt porci īn cocină.

void pigEnters()

Adaugă un porc īn cocină.

void pigExits()

Scade unu din numărul de porci din cocină.

Dacă aţi definit corect clasa, atunci urmatorul cod este corect:

public class PigPenTest {

    public static void run() {

        PigPen pen = new PigPen(2);

        pen.pigExits();

        System.out.println(pen.isEmpty()); // prints "false"

        pen.pigExits();

        System.out.println(pen.isEmpty()); // prints "true"

        pen.pigEnters();

        System.out.println(pen.isEmpty()); // prints "false"

    }

}

 

  1. Scrieţi o metodă la nivelul clasei, numită mode, care ia ca parametru un tablou de  int şi returnează īntregul care apare cel mai frecvent. De exemplu, codul care urmează foloseşte metoda mode şi ar trebui să tipărească 23.

int[] a = { 23, 34, 45, 23, 0, 23 };

System.out.println(mode(a));

 

Metoda nu trebuie să folosească alte metode pentru a-şi īndeplini sarcina. Va avea nevoie de mai mult de o buclă pentru a număra apariţiile fiecărui număr īn tablou

 

  1. Consideraţi programul următor:

class A {

    int f() { return 1; }

}

class B extends A {

    int f() { return 0; }

}

class Main {

    public static void main(String[] args) {

        A a = new B();

        System.out.println(a.f());

    }

}

Ce tipăreşte?

 

  1. Consideraţi programul următor:

class Ident {

    int f(int x) { return x; }

    int g(int x) { return f(f(x)); }

}

 

class Square extends Ident {

    int f(int x) { return x * x; }

}

class Main {

    public static void main(String[] args) {

        Ident a = new Ident();

        Ident b = new Square();

        Square c = new Square();

        System.out.println(a.g(3) + " " + b.g(3) + " " + c.g(3));

    }

}

Ce tipăreşte?

 

  1. Scrieţi o expresie care să extragă subşirul "kap", dată fiind declaraţia:

String str = "kakapo";

 

  1. Ce se va īntāmpla la tentativa de compilare şi execuţie a codului care urmează?

class MyClass {

  public static void main(String[] args) {

    String str1 = "str1";

    String str2 = "str2";

    String str3 = "str3";

    str1.concat(str2) ;

    System.out.println(str3.concat(str1));

  }

}

 

  1. Ce se va īntāmpla la tentativa de compilare şi execuţie a codului care urmează?

public class RefEq {

  public static void mai n(String[] args) {

    String s = "ab" + "12";

    String t = "ab" + 12;

    String u = new String("ab12");

    System.out.println((s==t) + " " + (s==u));

  }

}

 

  1. ce este o excepţie Java?

 

  1. Cum se pot trata situaţiile excepţionale īn Java? Daţi un scurt exemplu.

 

  1. Descrieţi mecanismul thry-throw-catch.

 

  1. Enunţaţi regula prinde-sau-declară.

 

  1. Cum se propagă excepţiile? Daţi un exemplu scurt.

 

  1. Ce trebuie să conţină minimal o clasă excepţie definită de utilizator? Daţi un exemplu scurt.

 

  1. Ce este o clasă interioară (inner) ?

 

  1. Ce este an anonymous inner class? Daţi un exemplu scurt.

 

  1. Ce este o clasă locală? Daţi un exemplu scurt.

 

  1. Ce este o componentă Java? Daţi un exemplu scurt.

 

  1. Ce este un container Java? Daţi un exemplu scurt.

 

  1. Care sunt paşii principali la afişarea graficii īn Java?

 

  1. Ce este un ascultător  (listener) in Java?

 

  1. Care este scopul call-back-urilor?

 

  1. Care este rolul modelului  īn arhitectura MVC?

 

  1. Care este rolul controlorului  īn arhitectura MVC?

 

  1. Care este rolul vederii  īn arhitectura MVC?

 

  1. Descrieţi pe scurt arhitectura cu model separabil din Swing.

 

  1. Ce este o Java Enumeration? Daţi un exemplu scurt.

 

  1. Ce este un tip generic in Java? Daţi un exemplu scurt.

 

  1. Scrieţi o metodă generică care să tipărească toate valorile stocate īntr-o colecţie.

 

  1. Ce este un iterator in Java? Daţi un exemplu scurt.

 

  1. Cum se pot include valori primitive īntr-o colecţie Java (Collection)? Daţi un  exemplu scurt.

 

  1. Ce este o Java Collection?

 

  1. Care sunt principalele diferenţe īntre clasele Vector şi ArrayList?

 

  1. Care este scopul testării software?

 

  1. Ce este testarea funcţională?

 

  1. Ce defineşte un caz de test?

 

  1. Ce trebuie considerat la dezvoltarea unui plan de teste?

 

  1. Ce este testarea unitară (a unităţilor)?

 

  1. Ce este un test harness?

 

  1. Ce este testarea regresivă?

 

  1. Ce reprezintă acoperirea īn testare?

 

  1. Cum se poate trasa execuţia unui program? (Sunt cel puţin 2 metode)

 

  1. Care sunt beneficiile jurnalizării (logging)?

 

  1. Care sunt costurile jurnalizării (logging)?

 

  1. Ce va tipări la execuţie următorul program?

public class UppTurn {

  public static void mai n(String[] args) {

    String str1 = "l ower", str2 = "LOWER", str3 = "UPPER";

    str1.toUpperCase();

    str1.replace("LOWER", "UPPER");

    System.out.printl n((str1. equals(str2)) + " " + (str1. equals(str3))) ;

  }

}

 

  1. Descrieţi paşii necesari pentru a citi şiruri dintr-un fişier secvenţial formatat.

 

  1. Ce returnează metoda length() din clasa File?

 

  1. Dacă se apelează write(0x01234567) pe o instanţă de OutputStream, ce se va scrie īn stream?

 

  1. Fiind dat programul:

import java.io.DataInputStream;

import java.io.EOFException;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

public class Endings {

  public static void main(String[] args) {

    try {

      FileInputStream fos = new FileInputStream("info.dat") ;

      DataInputStream dis = new DataInputStream(fos);

      int i= dis.readByte();

      while (i != -1) {

        System.out.print((byte)i + "| ");

        i= dis.readByte();

      }

    } catch (FileNotFoundException fnf) {

      System.out.println("File not found");

    } catch (EOFException eofe) {

      System.out.println("End of stream");

    } catch (IOException ioe) {

      System.out.println("Input error");

    }

  }

}

Ce se va īntāmpla la tentativa de compilare şi execuţie a codului dat?

 

  1. Cāte metode sunt definite īn interfaţa Serializable? Why?

 

  1. Fiind dat codul sursă:

public class Person  {

  protected String name;

  Person() { }

  Person(String name) { this. name = name; }

}

____________________________________________________________________

import java.io. Serializable;

public class Student extends Person implements Serializable {

  private long studNum;

  Student(String name, long studNum) {

    super(name);

    this. studNum = studNum;

  }

  public String toString() { return "(" + name + ", " + studNum + ") "; }

}

________________________________________________________________________

import java.io.*;

public class RQ800_10 {

public static void main(String args[])

    throws IOException, ClassNotFoundException {

    FileOutputStream outputFile = new FileOutputStream("storage. dat");

    ObjectOutputStream outputStream = new ObjectOutputStream(outputFile);

    Student stud1 = new Student("Aesop", 100);

    System.out.print(stud1);

    outputStream. writeObject(stud1);

    outputStream. flush();

    outputStream. close();

    FileInputStream inputFile = new FileInputStream("storage. dat");

    ObjectInputStream inputStream = new ObjectInputStream(inputFile);

    Student stud2 = (Student) inputStream.readObject();

    System.out.println(stud2);

    inputStream. close();

  }

}

Ce se va īntāmpla la tentativa de compilare şi execuţie a codului dat?

 

  1. Ce se va īntāmpla la tentativa de compilare şi execuţie a codului următor:

import java.util. ArrayList;

import java.util. Collections;

import java.util. List;

public class WhatIsThis {

  public static void main(String[] args) {

    List<StringBuilder> list = new ArrayList<StringBuilder>();

    list.add("B");

    list.add("A");

    list.add("C");

    Collections.sort(list, Collections.reverseOrder());

    System.out.println(list.subList(1, 2));

  }

}

 

  1. Cum se poate obţine persistenţa obiectelor īn Java?

 

  1. Ce este un Buffer Java?

 

  1. Care sunt beneficiile aduse de vederile (views ) unui Buffer?

 

  1. Care este scopul unui Buffer direct? Daţi un exemplu scurt.

 

  1. Ce este un Java Channel?

 

  1. Cānd se termină execuţia unui fir de lucru?

 

  1. Cum se poate stabili prioritatea unui fir de lucru?

 

  1. Descrieţi ciclul de viaţă al unui fir de lucru.

 

  1. Cum se poate termina corect un fir de lucru īn Java?

 

  1. Ce este o Java Collection?

 

  1. Care sunt restricţiile principale pentru applet?

 

  1. Care sunt principalele diferenţe īntre o aplicaţie de sine stătătoare şi un applet?

 

  1. Descrieţi ciclul de viaţă al unui applet.

 

  1. Care sunt metodele predefinite ale unui applet şi ce se pune īn ele?

 

  1. Care sunt containere de nivel īnalt īn GUI Java?

 

  1. Ce sunt firele de lucru Java?

 

  1. Prin ce diferă firele de lucru de taskurile sistemului de operare?

 

  1. Ce este o metodă de fabricare? Daţi un exemplu scurt.