Возможность продолжить чтение файла и подождать до тех пор, пока у файла не появится больше обновлений для вас, не должно быть так сложно выполнить код самостоятельно. Вот какой-то псевдокод:
BufferedReader br = new BufferedReader(...);
String line;
while (keepReading) {
line = reader.readLine();
if (line == null) {
//wait until there is more of the file for us to read
Thread.sleep(1000);
}
else {
//do something interesting with the line
}
}
Я бы предположил, что вы захотите поместить этот тип функций в свой собственный поток, чтобы вы могли спать и не влиять на другие области вашего приложения. Вы хотели бы показать keepReading
в сеттере, чтобы ваш основной класс / другие части приложения могли безопасно закрыть поток без каких-либо других головных болей, просто позвонив stopReading()
или что-то подобное.
Попробуйте (a% b) * Math.Sign (a)
Попробуйте это; работает правильно.
static int MathMod(int a, int b) {
return (Math.Abs(a * b) + a) % b;
}
Ну, определение (если я не ошибаюсь) - что-то вроде этого целочисленного деления, как встроенный модуль:)
Другой вариант - изменить результат встроенного модуля в соответствии со знаками операндов. Примерно так:
if(a < 0 && b > 0)
{
return (a % b + b) % b;
}
else if ....
Если вы используете какой-либо из этих алгоритмов и вам нужно также выполнить деление, не забудьте убедиться, что вы вычли 1, когда это необходимо.
То есть,
, если -5 % 2 = -1
и -5 / 2 = -2
, и если вам небезразлично, что -5 / 2 * 2 + -5 % 2 = -5
, то когда вы вычисляете -5 % 2 = 1
, вы также вычисляете -5 / 2 = -3
.
Я знаю, что вопрос не задавался, но я только написал и протестировал метод, который также возвращает частное. Я не нашел этого, когда искал его, поэтому я подумал, что выложу его туда.
/// <summary>
/// Compute integer quotient and remainder of <paramref name="dividend"/> / <paramref name="divisor"/>
/// where the <paramref name="remainder"/> has the same sign as <paramref name="divisor"/>, and is
/// between zero (inclusive) and the <paramref name="divisor"/> (exclusive). As always,
/// (quotientResult * <paramref name="divisor"/> + <paramref name="remainder"/> == <paramref name="dividend"/>).
/// </summary>
public static int DivRemPeriodic(int dividend, int divisor, out int remainder) {
var quotient = Math.DivRem(dividend, divisor, out remainder);
if (divisor > 0 ? remainder < 0 : remainder > 0) {
remainder += divisor;
quotient -= 1;
}
return quotient;
}
Исправление:
(ans = a% b) <0? (a <0 && b <0? (ans-b)% (- b): (ans + b)% b): ans