Проблема с вашим кодом заключается в том, что next()
ищет элементы одного уровня, но элементы input
не являются элементами одного уровня.
Чтобы сделать то, что вам нужно, через обход DOM, вам нужно получить ближайшего родителя li
от входа .prod
, затем использовать next()
, чтобы получить брата li
, затем find()
для получите вход .categ
, например:
$("input.categ").val("cat");
$("input.prod").closest('li').next('li').find("input").val("dog");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li><input class="prod"></li>
<li><input class="categ">I need "dog" value here</li>
</ul>
Следует отметить, что в этом случае обход DOM скорее спорный, так как вы можете просто выбрать элемент $('.categ')
напрямую, но я предполагаю, что это учебное упражнение.
Этот способ работал для меня очень хорошо, но он включает в себя преобразование из int в строку и обратно в int.
Integer.parseInt(String.valueOf(x).substring(0,1));
Вот уменьшенная версия для получения цифр всех позиций, она работает с отрицательным значением (не десятичным).
int number = -23456;
int length = (int) Math.log10(Math.abs(number)) + 1; //This gets the length of the number of digits used
//Math.abs to change negative int to positive
System.out.println("Digit at pos " + 1 + " is :- " + (int)(Math.abs(number)/Math.pow(10,(length-1))));
for (int i = 2; i <= length; i++){
System.out.println("Digit at pos " + i + " is :- " + (int)(Math.abs(number)/Math.pow(10,(length-i))%10));
}
Это Groovy, но его легко конвертировать в Java:
int firstNum(int x) {
a = Math.abs(x)
sig = Math.floor(Math.log10(a))
return a / Math.pow(10, sig)
}
Результаты:
groovy> println (firstNum (345))
3groovy> println (firstNum (3452))
3groovy> println (firstNum (-112))
1groovy> println (firstNum (9999))
9groovy> println (firstNum (Integer.MAX_VALUE))
2groovy> println (firstNum (Integer.MIN_VALUE + 1))
2
Предположим, что число имеет тип int
, поэтому
int number = 352
// Change the int into String format
String numberString = Integer.toString(number);
// We can know the first digit of that String with substring method directly
Integer.parseInt(numberString.substring(0,1));
или другой способ состоит в том, чтобы преобразовать String в char и получить числовое значение из char
например,
int number = 352;
String numberString = Integer.toString(number);
Character.getNumericValue(String.valueOf(target).charAt(0));
// 0 means the first digit of the number
int main(void) {
int num = 3421;
while (num*num + 10 - num*(1 + num) <= 0) {
num *= (num - 0.9*num)/num;
}
std::cout << num << std::endl;
}
Самый быстрый способ будет:
Обновлено: Чтобы обработать Integer.MIN_VALUE и оставить Math.abs () и приведение к длинному из цикла:
public static int getFirstDigit(int i) {
i = Math.abs(i / (Math.abs((long)i) >= 10 ) ? 10 : 1);
while (i >= 10 )
i /= 10;
return i;
}
Оригинальный ответ:
return Math.abs(i);
} public static int getFirstDigit(int i) {
while (Math.abs(i) >= 10 ) {
i = i / 10;
}
return Math.abs(i);
}
Игнорирование отрицательных значений приводит к:
(""+345).charAt(0);
public static int firstDigit(int n) {
while (n < -9 || 9 < n) n /= 10;
return Math.abs(n);
}
Должны также хорошо справляться с отрицательными числами. В этом случае вернет отрицательную первую цифру.
Еще один способ:
public int firstDigit(int x) {
if (x == 0) return 0;
x = Math.abs(x);
return (int) Math.floor(x / Math.pow(10, Math.floor(Math.log10(x))));
}
Глядя на предоставленный код, кажется, что все усложняется, вот простое решение ...
int number = 4085;
int firstDigit = number;
while (firstDigit > 9)
{
firstDigit = firstDigit / 10;
}
System.out.println("The First Digit is " + firstDigit);
Простое Путь будет использоваться String.valueof (Math.abs ((длинный) х)). Чарат (0)
- что Дадут вам как Char
1 . Чтобы получить это как целочисленное значение, вы можете просто вычесть «0» (как в Unicode, «0» до «9» являются смежными).
Это несколько расточительно, конечно. Альтернативой только что будет принимать абсолютное значение, а затем циклическое раунд разделяться на 10 до тех пор, пока число не будет в диапазоне 0-9. Если это домашнее задание, это ответ, которому я дал. Однако я не собираюсь предоставлять код для этого, потому что я думаю, что может Быть домашним заданием. Однако, если вы предоставляете комментарии и отредактируете свой ответ, чтобы объяснить, как вы делаете, и какие проблемы вы работаете, мы можем помочь.
1 Одна липкая точка к примечанию заключается в том, что абсолютное значение integer.min_value
не может быть представлено как int
- так что вы можете сначала преобразовать в Долго
, затем используйте math.abs
, затем делает арифметику. Вот почему там есть актеры.
Отсутствие рекурсивного решения:
int getFirstInt(int input) {
if (input > 0 ? input < 10 : input > -10) {
return input > 0 ? input : -input;
}
return getFirstInt(input / 10);
}
Я бы не использовал Тернарный оператор в реальной жизни, но - не так ли это красиво? ;)
Домашняя работа Подсказка: преобразуйте его в строку и верните первый символ.
int a = 354;
int b = (int)(a / Math.Pow(10, (int)Math.Log10(a))); // 3