© 2008 Наталия Македа
Все материалы блога защищены авторским правом. Любая перепечатка или использование материалов этого блога в коммерческих целях возможна лишь с письменного согласия автора. При некоммерческом использовании ссылка на блог обязательна.

Показаны сообщения с ярлыком тест. Показать все сообщения
Показаны сообщения с ярлыком тест. Показать все сообщения

среда, 5 ноября 2008 г.

Ответы на тест по операторам (Выпуск 13)

Вопросы теста можно посмотреть здесь.
  1. Ответ: С
    Вычисление производится в таком порядке: x = a + b; a = a + 1; b = b + 1; Поэтому x = 6 + 7 то есть 13. После чего переменные a и b инкрементируются до значений 7 и 8 соответственно.
  2. Ответ: B, С
    В варианте A использование оператора ! незаконно, поскольку x является переменной типа int, а не boolean. На этом часто попадаются C и C++ программисты. В варианте B выражение (x<3) имеет тип boolean, поэтому перед ним можно использовать оператор !. В ответе C поразрядный оператор ~ применен к целочисленному x, значение которого равно 6, что в битовом виде имеет форму 0..0110 (на месте двух точек должны стоять 27 нулей). После применения оператора ~ x примет значение 1..1001 (на месте двух точек подставьте 27 единиц).
  3. Ответ: A
    Битовое представление -1 состоит из единиц во всех разрядах. В варианте A эта строка из единиц сдвигается вправо на 5 позиций и освободившиеся 5 первых позиций заполняются нулями. Это в десятичном выражении имеет положительное значение 134217727. В варианте B аналогичный сдвиг происходит на 32 разряда и результат состоит из строки, у которой во всех позициях нули, то есть 0. Вариант C недопустим, потому что результат выражения x <<< 5 имеет тип int и не может быть присвоен переменной типа byte без явного приведения типов, которое в данном случае отсутствует. Наконец, в варианте D при сдвиге все освободившиеся позиции принимают значение наиболее значимого разряда исходного значения, то есть -1. Результат операции не отличается от исходного значения и равен -1.
  4. Ответ: A, C, E
    Варианты A и C эквивалентны, поскольку x+=y эквивалентно x = x+y. Выражение x+y "суммирует" строки и целое число, в результате из целого числа будет создан объект строкового типа и потом будет создана новая строка (ещё один новый объект строкового типа) со значением "Hello9". В варианте B сравнение x == y незаконно, потому что целочисленный тип не может сравниваться с указателем. В варианте D в результате вычисления выражения y+x также, как и в вариантах A и C создаётся новая строка. Но в последствии она присваивается переменной целочисленного типа, а это недопустимо. Вариант E самый оригинальный. В нём важны два момента: условный оператор :? и укороченный оператор &&. Левый операнд укороченого оператора, то есть выражение (x != null), всегда равен false. Следовательно правый операнд, то есть выражение (x.length() > 0), никогда не будет вычисляться, поскольку всё выражение заведомо равняется значению false. Это значение false затем используется в выражении условного оператора, результат которого будет равен 0 (операнд после двоеточия).
  5. Ответ: A, E
    Хотя int и float и не являются совместимыми с точки зрения присваиваний, они могут легко использоваться в левых и правых частях операторов сравнения, коим и является оператор ==. При этом int 100 приводится к float 100.0 и запросто сравнивается с другим float 100.0F. Поэтому вариант A проходит. В варианте B код не откомпилируется, потому что int и Integer (указатель) не могут быть приведены даже в случае оператора сравнения. В варианте C код компилируется и сравнение может быть проведено. Но выражение x == y сравнивает два различных указателя, и поэтому результат теста равен false. Аналогичные рассыждения можно провести для варианта D. Вариант E кажется эквивалентным варианту D, но это на самом деле не так. В варианте E для строковой константы "100" создаётся объект строкового типа, а x и y являются указателями на этот объект. То есть тест (x == y) равняется true и мы получаем сообщение "Equal".
  6. Ответ: AВ четвёртой строке кода результат вычисления (s.length()>5) равен false (поскольку длина строки "Hello" равна 5). Таким образом, всё выражения условия if равно false. В результате никаких манипуляций над строкой не производится и она остаётся прежней.
  7. Ответ: B
    Побитовый XOR оператор ^ возвращает 0, если оба биты одинаковы (оба равны 0 или оба равны 1), и 1 - в противном случае. Таким образом 00001010^00001111=00000101, то есть 5 в десятичном исчислении.
  8. Ответ: CВ операторе ?: используются операнды различных типов: 99.99 (double) и 9 (int). Поэтому int приводится к double и результат всего выражения будет типа double. Поскольку x = 4, то тест (x > 4) равен false. Следовательно, результат равен значению после двоеточия, то есть 9.0 (то есть типа double).
  9. Ответ: B
    Вычисление достаточно очевидно, поскольку участвуют только положительные числа. Деление 10 на 3 даёт 3 и в остатке 1, что и является ответом. Если бы мы имели дело с дробными числами, то алгоритм вычисления остатка от деления y на x был бы таким: вычитать x из y до тех пор, пока y не станет меньше x. Как только это случится, y - остаток от деления. Для отрицательных чисел можно забыть о знаках, но иметь в виду, что знак остатка от деления равен знаку делимого (левого операнда).
  10. Ответ: AОператор присваивания op= высчитывает левое выражение только один раз. Таким образом, декремент --x происходит только раз и в результате получается 0, а не -1. То есть не возникает никаких ошибок выхода за границы (out-of-bounds). В нулевой позиции массива находится значение Fred. При этом декремент имеет место перед операцией +=. Хотя объекты типа String не могут изменять своего значения (immutable), указатели, коими являются элементы массивы, могут изменяться. То есть мы можем создать новый объект в нулевой позиции массива name, который будет иметь значение "Fred.", то есть строка Fred, заканчивающаяся точкой.


Читать далее!

воскресенье, 12 октября 2008 г.

Итоги главы 2 и тест по операторам (Выпуск 12)

Резюме главы 2 об операторах:

Вы должны знать тип результата унарных и бинарных арифметичских операций, применямых над операндами различных типов.

Различие между равенством объектов и равенством ссылок. Функциональность метода equal() в классах Object, String, Boolean (они сравнивают инкапсулированные данные).

Тест

  1. После выполнения кода ниже каковы будут значения переменных x, a, и b?
    1. int x, a = 6, b = 7;
    2. x = a++ + b++;
    1. x = 15, a = 7, b = 8
    2. x = 15, a = 6, b = 7
    3. x = 13, a = 7, b = 8
    4. x = 13, a = 6, b = 7
  2. Какие из нижеследующих выражений допустимы? (Выберите все допустимые)
    1. int x = 6; x = !x;
    2. int x = 6; if (!(x > 3)) {}
    3. int x = 6; x = ~x;
  3. Какие выражения возвратят положительное значение переменной x?
    1. int x = -1; x = x >>> 5;
    2. int x = -1; x = x >>> 32;
    3. byte x = -1; x = x >>> 5;
    4. int x = -1; x = x >> 5;
  4. Какие из нижеследующих выражений допустимы? (Выберите все допустимые)
    1. String x = “Hello”; int y = 9; x += y;
    2. String x = “Hello”; int y = 9; if (x == y) {}
    3. String x = “Hello”; int y = 9; x = x + y;
    4. String x = “Hello”; int y = 9; y = y + x;
    5. String x = null;int y = (x != null) && (x.length() > 0) ? x.length() : 0;
  5. Какие из нижеследующих выражений откомпилируются и напечатают “Equal” во время выполнения? (Выберите все допустимые)
    1. int x = 100; float y = 100.0F;
      if (x == y)
      System.out.println("Equal");
    2. int x = 100; Integer y = new Integer(100);
      if (x == y)
      System.out.println("Equal");
    3. Integer x = new Integer(100);
      Integer y = new Integer(100);
      if (x == y)
      System.out.println("Equal");
    4. String x = new String("100");
      String y = new String("100");
      if (x == y)
      System.out.println("Equal");
    5. String x = "100"; String y = "100";
      if (x == y)
      System.out.println("Equal");
  6. Каков результат выполнения кода ниже?
    1. public class Short {
    2. public static void main(String args[]) {
    3. StringBuffer s = new StringBuffer(“Hello”);
    4. if ((s.length() > 5) &&
    5. (s.append(“ there”).equals(“False”)))
    6. ; // do nothing
    7. System.out.println(“value is “ + s);
    8. }
    9. }
    1. Hello
    2. Hello there
    3. Ошибка компиляции в 4-й или 5-й строке
    4. Ничего не выводится
    5. Исключение NullPointerException
  7. Каков результат выполнения кода ниже?
    1. public class Xor {
    2. public static void main(String args[]) {
    3. byte b = 10; // 00001010 binary
    4. byte c = 15; // 00001111 binary
    5. b = (byte)(b ^ c);
    6. System.out.println(“b contains ” + b);
    7. }
    8. }
    1. b contains 10
    2. b contains 5
    3. b contains 250
    4. b contains 245
  8. Каков результат компиляции и выполнения кода ниже?
    1. public class Conditional {
    2. public static void main(String args[]) {
    3. int x = 4;
    4. System.out.println(“value is “ +
    5. ((x > 4) ? 99.99 : 9);
    6. }
    7. }
    1. value is 99.99
    2. value is 9
    3. value is 9.0
    4. Ошибка компиляции в пятой строке
  9. Каков результат выполнения кода ниже?
    1. int x = 3; int y = 10;
    2. System.out.println(y % x);
    1. 0
    2. 1
    3. 2
    4. 3
  10. Каков результат выполнения кода ниже?
    1. int x = 1;
    2. String [] names = { “Fred”, “Jim”, “Sheila” };
    3. names[--x] += “.”;
    4. for (int i = 0; i < names.length; i++) {
    5. System.out.println(names[i]);
    6. }
    1. Fred.\nJim\nSheila
    2. Fred\nJim.\nSheila
    3. Fred\nJim\nSheila.
    4. Fred\nJim\nSheila
    5. Исключение ArrayIndexOutOfBoundsException


Читать далее!

воскресенье, 27 апреля 2008 г.

Тест по основам языка (Выпуск 3)

1.10. Тест для самопроверки

  1. Данные типов со знаком имеют равное количество положительны ненулевых и отрицательных значений.
    1. Истинно
    2. Ложно
  2. Выберите все идентификаторы, которые допускаются в Java программе.
    1. BigOlLongStringWithMeaninglessName
    2. $int
    3. bytes
    4. $1
    5. finallist
  3. Какие из нижеследующих сигнатур могут быть использованы для объявления методаmain()? (Выберите все допустимые.)
    1. public static void main()
    2. public static void main(String arg[])
    3. public void main(String [] arg)
    4. public static void main(String[] args)
    5. public static int main(String [] arg)
  4. Если исходый файл включает в себя все три высокоуровневых элемента, какова их последовательность?
    1. Импорты, декларация пакета, классы
    2. Классы, импорты, декларация пакета
    3. Декларация пакета идёт первой, а порядок импортов и классов не существенен
    4. Декларация пакета, импорты, классы
    5. Импорты идёт первыми, а порядок декларации пакета и определений классов несущественен
  5. Рассмотрим следующую строку кода: int[] x = new int[25];. После её выполения, какие утверждения истинны? (Выберите все истинные утверждения.)
    1. x[24] = 0
    2. x[24] не определено
    3. x[25] = 0
    4. x[0] = null
    5. x.length = 25
  6. Рассмотрим следующий код:
    1. class Q6 {
    2. public static void main(String args[]) {
    3. Holder h = new Holder();
    4. h.held = 100;
    5. h.bump(h);
    6. System.out.println(h.held);
    7. }
    8. }
    9.
    10. class Holder {
    11. public int held;
    12. public void bump(Holder theHolder) {
    13. theHolder.held++;
    14. }
    15. }

    Что печатается в строке 6?
    1. 0
    2. 1
    3. 100
    4. 101
  7. Рассмотрим следующий код:
    1. class Q7 {
    2. public static void main(String args[]) {
    3. double d = 12.3;
    4. Decrementer dec = new Decrementer();
    5. dec.decrement(d);
    6. System.out.println(d);
    7. }
    8. }
    9.
    10. class Decrementer {
    11. public void decrement(double decMe) {
    12. decMe = decMe - 1.0;
    13. }
    14. }

    Что печатается в строке 6?
    1. 0.0
    2. -1.0
    3. 12.3
    4. 11.3
  8. Как можно заставит сборщик мусора освободить память, выделенную под некий объект?
    1. Никак
    2. Вызвав System.gc()
    3. Вызвав System.gc(), и передав параметром ссылку на объект, память под который хотим освободить
    4. Вызвав Runtime.gc()
    5. Установив ссылку на объект в null
  9. Каков диапазон значений, которые могут быть присвоены перемнной типа short?
    1. Зависит от аппаратного обеспечения компьютера, на котором запускаетя программа
    2. От 0 до 216-1
    3. От 0 до 232-1
    4. От -215 до 215-1
    5. От -231 до 231-1
  10. Каков диапазон значений, которые могут быть присвоены перемнной типа byte?
    1. Зависит от аппаратного обеспечения компьютера, на котором запускаетя программа
    2. От 0 до 28-1
    3. От 0 до 216-1
    4. От -27 до 27-1
    5. От -215 до 215-1


Читать далее!