Страницы

Поиск по вопросам

пятница, 14 декабря 2018 г.

Сравнение результата деления без остатка с нулём

Зачем тут сравнение с 0?
if (i % 3 == 0)
Я так понимаю, тут происходит деление без остатка, но не понимаю зачем потом сравнивать.


Ответ

Это проверка на то что остаток от деления числа i на другое число (3) равен 0.
Обычно так делается для того чтобы выполнять какое-то действие в цикле, но не каждый раз (в данном случае только каждый 3 раз).
Например:
раскрасить каждую 2 строку в списке другим цветом if(i % 2 == 0) ... показать на экране прогресс при каждой 10 итерации if(i % 10 == 0) ... разделить поток цифр, добавив пробел после каждых 3 if(i % 3 == 0) ... и т.п.

Проверить наличие CSS класса в javascript

Как проверить наличие или отсутствие класса у элемента на чистом javascript?
Необходимо добавить класс элементу по клику, но при этом проверить наличие у него этого класса перед добавлением, чтобы класс не дублировался.
вот код:
var cells = document.getElementsByTagName('td');
for(var i=0; iссылка на полный код jsfiddle


Ответ

сделала так - по клику добавляется класс и удаляется при повторном клике. вот код:
var cells = document.getElementsByTagName('td'); for(var i=0; ifunction selectDate(){ if(this.classList.contains('active')){ this.classList.remove('active'); }else { this.classList.add('active'); } }
ссылка на полный код: jsfiddle

Почему в int переменной странное число?

Почему переменная t выводит на экран не то?
#include #include
int a[7];
void vvoda(){ puts("Puts values for a array"); for(int i = 0; i < 7; i++) scanf("%i", &a[i]); }
void suma(){ int t; for(int i = 0; i < 7; i++){ t += a[i]; t = t/7; printf("%i
", &t); } printf("Average of a array is %i", &t); }
main(void){ vvoda(); suma(); }
Вот что выдает консоль:
Puts values for a array 4 5 45 4 54 5 4 2293272 2293272 2293272 2293272 2293272 2293272 2293272 2293272 Average of a array is 2293272 -------------------------------- Proccess exited after 2.143 seconds with return value 0 Для продолжения нажмите любую клавишу . . .


Ответ

Во-первых, у вас не инициализирована локальная переменная t
void suma(){ int t; ^^^^^^
Во-вторых, если вы используете выражение t = t/7;, то логично было бы объявить эту переменную, как число с плавающей запятой, например, имеющую тип double. Иначе у вас будет отбрасывание дробной части, то есть будет иметь место целочисленное деление. Например, при t равным 4 выражение t/7 будет равно 0
И, в-третьих, в данных предложениях вывода
printf("%i
", &t); ^^^^
printf("Average of a array is %i", &t); ^^^^
вы должны использовать саму переменную, а не указатель на нее.
printf("%i
", t); printf("Average of a array is %i", t);
Имейте в виду, что согласно стандарту C функция main без параметров должна иметь объявление
int main( void ) ^^^
Также вместо магического числа 7 было бы лучше ввести именованную константу, как, например,
#define N 7
и использовать это имя вместо числа.
Например
#define N 7
int a[N];
void vvoda(){ puts("Puts values for a array"); for(int i = 0; i < N; i++){ scanf("%i", &a[i]); } } // и т.д.
Также не было никакой необходимости объявлять массив a глобальным.
Заголовок можно исключить из программы, так как ни одно определение из этого заголовка не используется.

Java - путь исполняемого jar файла

Требуется достать полный путь исполняемого файла, но при этом вернуться на 1 каталог назад, к примеру
мой класс.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()
Возвращает
/C:/Users/Arturs/Desktop/DIV.jar
но мне нужно довести до /C:/Users/Arturs/ Есть ли какие то предусмотренные функции, что бы не приходилось обрезать строку, высчитывая количество символов справа.


Ответ

Попробуй так:
Path path = Paths.get(твой_класс.class.getResource(".").toURI()); System.out.println(path.getParent()); // <-- Parent directory System.out.println(path.getParent().getParent()); // <-- Parent of parent directory

Использование переменных объявленных в for

Почему недопустим такой вариант?
int sum=0; for(int j=0; jА такой компилируется:
int sum=0; int j=0; for( ; j(mas уже инициализирован)


Ответ

Я думаю, оба варианта компилируются, только первый выдаёт предупреждение из-за того, что этот код содержит undefined behaviour.
Переменную sum инициализировать за вас компилятор не будет. А использование неинициализировнной переменной есть даже не unspecified, а undefined behaviour. Это значит, что не только «начальное значение переменной может быть любым», но «при выполнении программы может произойти всё, что угодно, включая форматирование жёсткого диска».

Окей, вопрос отредактирован, теперь обе переменные инициализированы, ищем дальше.
Но я не заметил ещё одну ошибку. У вас написано for(int j=0; jВ результате в первом случае переменная j локальна в блоке и не видна за его пределами: этот код можно равносильно записать так:
for(int j=0; j{ sum+=mas[0][j]; sum+=mas[n-1][j]; }

Игнорируется часть кликов

На днях понадобилось написать программу, которая считает количество кликов, совершенных человеком. Однако заметил, что отлавливается не каждый клик: если человек совершает хотя бы 2-3 щелчка в секунду, часть точно будет проигнорирована. Как с таким бороться? Отлавливаю с помощью элементарной
private void opg_Click(object sender, EventArgs e) { count++; }


Ответ

Скорее всего, когда пользователь делает 2-3 клика в секунду, то это воспринимается системой как двойной клик (отдельное от обычного клика событие).
Попробуйте добавить:
private void opg_DoubleClick(object sender, EventArgs e) { count = count + 1; }
Также разницу поясняет справка от мелкомягких

Заокруглить три угла TextView

Как сделать TextView с тремя заокруглеными углами. Пытался так но неработает


Ответ

Попробуйте так кинуть xml в drawable

Ну и у edittext в background прилепить этот drawable