Как было сказано многими хорошими ответами, объект должен реализовать Iterable interface
, если он хочет использовать цикл for-each
.
Я отправлю простой пример и попытаюсь объяснить в другом как работает цикл for-each
.
Пример цикла for-each
:
public class ForEachTest {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("111");
list.add("222");
for (String str : list) {
System.out.println(str);
}
}
}
Затем, если мы используем javap
для декомпиляции этого класса, мы получим это Пример байт-кода:
public static void main(java.lang.String[]);
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=4, args_size=1
0: new #16 // class java/util/ArrayList
3: dup
4: invokespecial #18 // Method java/util/ArrayList."<init>":()V
7: astore_1
8: aload_1
9: ldc #19 // String 111
11: invokeinterface #21, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
16: pop
17: aload_1
18: ldc #27 // String 222
20: invokeinterface #21, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
25: pop
26: aload_1
27: invokeinterface #29, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
Как видно из последней строки образца, компилятор автоматически преобразует использование ключевого слова for-each
в использование Iterator
во время компиляции. Это может объяснить, почему объект, который не реализует Iterable interface
, будет генерировать Exception
, когда он пытается использовать цикл for-each
.
Числовое поле выполняет свою собственную проверку, если оно содержит нечисловой символ, значение будет автоматически удалено до тех пор, пока не будет задано правильное значение. Вы можете увидеть это с помощью console.log(value)
.
Итак, вы также можете проверить пустую строку
function check(value, msg) {
var valid = ((value != '') && /^\d*\.?\d*$/.test(value));
if (valid) {
document.getElementById(msg).style.display = "none";
} else {
document.getElementById(msg).style.display= "inline";
}
return valid;
}
RegEx не работает, потому что возвращаемое значение является числом , а не строкой . Он работает «как ожидалось», когда вы принудительно возвращаете значение в строковый формат:
var valid = /^\d*\.?\d*$/.test(String(value));
Возможно, вы захотите прочитать . Как получить исходное значение & lt; input type = & quot; number & quot; & GT; поле? , поскольку он предполагает, что вы не имеете для проверки входа type=number
.
добавьте этот код и добавьте идентификатор к вашему входу.
$(document).ready(function() {
$("#txtboxToFilter").keydown(function (e) {
// Allow: backspace, delete, tab, escape, enter and .
if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
// Ensure that it is a number and stop the keypress
if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
});
});