JavaRush/Блог/Архив info.javarush/Кухня(); Задание N14.
terranum
28 уровень

Кухня(); Задание N14.

Статья из группы Архив info.javarush
участников
Кухня(); Задание N14. - 1 Правила [Одномерные массивы] 14. При поступлении в вуз абитуриенты, получившие "двойку" на первом экзамене, ко второму не допускаются. В массиве A [n]записаны оценки экзаменующихся, полученные на первом экзамене. Подсчитать, сколько человек не допущено ко второму экзамену.
Комментарии (35)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
RabenokDmitry
Уровень 21
10 февраля 2015, 00:43
public static int countLosers(int[] array) {
        int count = 0;
        for (int value : array) {
            if (value == 2)
                count++;
        }
        return count;
    }


Что называется без наворотов)
Voronblack
Уровень 17
25 августа 2014, 12:42
Вы монстры :))
Sultan
Уровень 16
25 августа 2014, 12:28
О, смотрите еще вариант:

public static int count(int[] a) {
    int c = 0;
    for (int n : a) {
        c += 1 - n / 3;
    }
    return c;
}
terranum
Уровень 28
25 августа 2014, 13:21
А кто сказал что система пятибалльная?)
Вот оценки за первый экзамен: 3, 4, 5, 2, 1, 3, 7
Sultan
Уровень 16
25 августа 2014, 13:22
система 2-5. В моих расчетах.
terranum
Уровень 28
25 августа 2014, 13:32
Глянь Аксиомы в дизайне П.О. всего 12 минут, и твои программы уже никогда не будут прежними. ;)
Sultan
Уровень 16
25 августа 2014, 13:35
поставил на скачку)
Docktor91
Уровень 40
25 августа 2014, 12:26
хм… незнал, теперь буду знать))спс
Docktor91
Уровень 40
25 августа 2014, 12:12
public static int getLosersCount(int[] mas)
{
    int c = 0;
    for (int n: mas)
        c = n < 3? c++: c;
    return c;
}
Sultan
Уровень 16
25 августа 2014, 12:14
беспощадно D (losers)
Docktor91
Уровень 40
25 августа 2014, 12:15
))
terranum
Уровень 28
25 августа 2014, 12:19
public static int getLosersCount(int[] mas)
    {
        int c = 0;
        for (int n : mas)
            c = n < 3 ? ++c : c;
        return c;
    }


Постфиксный декремент барахлит.
Docktor91
Уровень 40
25 августа 2014, 12:20
тем не менее… он гарантирует инкремент «с»
Sultan
Уровень 16
25 августа 2014, 12:20
где барахлит-то?
terranum
Уровень 28
25 августа 2014, 12:23
Так мы же делаем присвоение через тернарник. Инкремент переписывается. Тогда так уже:
public static int getLosersCount(int[] mas)
    {
        int c = 0;
        for (int n : mas)
            if(n < 3)
                c++;
        return c;
    }

Sultan
Уровень 16
25 августа 2014, 12:26
действительно, c = c++ — в результате не меняет с. Думаю, норм будет c = n < 3? c + 1: c;
terranum
Уровень 28
25 августа 2014, 12:26
int c = 0;
System.out.println(c == c++);
terranum
Уровень 28
25 августа 2014, 12:28
как ваирант:
c = n < 3 ? ++c : c;
Sultan
Уровень 16
25 августа 2014, 12:31
возможно ли, что постфиксный оператор ++ выполняет две операции: с++ ~ с = с + 1? Тогда с = ++с — это три операции. А с = с + 1 сразу — две операции.
Sultan
Уровень 16
25 августа 2014, 12:32
и еще вариант: c += n == 2? 1: 0;
terranum
Уровень 28
25 августа 2014, 13:14
Постфиксный и префиксный вся логика в названии.
Первый инкрементирует после, второй до.
1
int i = 5; 
i = i++; 
System.out.println(i); 

2
i = 5; 
i = i++ + i++; 
System.out.println(i);

3
i = 5; 
i = i++ + ++i; 
System.out.println(i);

4
i = 5; 
i = ++i + ++i; 
System.out.println(i);

Надо подумать что будет выведено на экран в каждом случае.
Sultan
Уровень 16
25 августа 2014, 13:16
5, 11, 12, 13?
terranum
Уровень 28
25 августа 2014, 13:24
Точно! :)
Docktor91
Уровень 40
25 августа 2014, 13:32
а можно поподробней?
тоесть вычисляется сначала левый операнд, т.е.
i = (i = i + 1) + i++;
Sultan
Уровень 16
25 августа 2014, 13:35
в каком?
Docktor91
Уровень 40
25 августа 2014, 13:36
второе, ну и 3 тоже
Sultan
Уровень 16
25 августа 2014, 13:41
вычисляется-то первый операнд, но i++ увеличивает i на 1, но возвращает прежнее i.
i = 5;
i = i++ + i++ => i = 5 + i++; (i = 6) => i = 5 + 6; (i = 7) => i = 11;
Docktor91
Уровень 40
25 августа 2014, 13:43
i = 5 + i++;

тоесть фактически i изменяет 2 операнд, правильно?
Docktor91
Уровень 40
25 августа 2014, 13:47
или
i(5)= (5)i++(увеличивает на 1, но возвращает 5)+(6)i(т.к. и увеличина то 6)
Sultan
Уровень 16
25 августа 2014, 13:48
если точнее, постфиксный оператор ++, примененный к i в первом операнде, влияет на i в последующем(их)
Docktor91
Уровень 40
25 августа 2014, 13:50
ок)спасибо, разобрался)
Sultan
Уровень 16
25 августа 2014, 11:38

public static int count(int[] a) {
    int c = 0;
	for (int n : a) {
        if (n != 2) c++;
    }
    return c;
}
terranum
Уровень 28
25 августа 2014, 12:12
Подсчитать, сколько человек не допущено ко второму экзамену.
Sultan
Уровень 16
25 августа 2014, 12:12
ну тогда n == 2
Sultan
Уровень 16
25 августа 2014, 12:13
не первый раз неправильно прочел задание и не в последний, наверное)