Java: Что делает оператор двоеточия (:)?
Я сам посмотрел бы, но я даже не знаю, как это называется. Кто-нибудь возражал бы, объясняя, что он делает?
Я не знал, что было несколько раз: появилось. Что здесь делается в этом случае:
public String toString() {
String cardString = "";
for (PlayingCard c : this.list) // <--
{
cardString = cardString + c + "\n";
}
Как бы вы пишете этот цикл for-each
по-другому, чтобы не включать ":"?
Ответы
Ответ 1
В коде Java используется несколько мест, в которых используется двоеточие:
1) Выпадающая метка (Tutorial):
label: for (int i = 0; i < x; i++) {
for (int j = 0; j < i; j++) {
if (something(i, j)) break label; // jumps out of the i loop
}
}
// i.e. jumps to here
2) Тернарное условие (Tutorial):
int a = (b < 4)? 7: 8; // if b < 4, set a to 7, else set a to 8
3) Для каждого цикла (Tutorial):
String[] ss = {"hi", "there"}
for (String s: ss) {
print(s); // output "hi" , and "there" on the next iteration
}
4) Утверждение (Guide):
int a = factorial(b);
assert a >= 0: "factorial may not be less than 0"; // throws an AssertionError with the message if the condition evaluates to false
5) Случай в инструкции switch (Tutorial):
switch (type) {
case WHITESPACE:
case RETURN:
break;
case NUMBER:
print("got number: " + value);
break;
default:
print("syntax error");
}
6) Ссылки на методы (Tutorial)
class Person {
public static int compareByAge(Person a, Person b) {
return a.birthday.compareTo(b.birthday);
}}
}
Arrays.sort(persons, Person::compareByAge);
Ответ 2
Нет оператора "двоеточие", но двоеточие отображается в двух местах:
1: В тернарном операторе, например:
int x = bigInt ? 10000 : 50;
В этом случае тернарный оператор действует как выражение "if" для выражений. Если bigInt истинно, тогда x получит 10000, назначенных ему. Если нет, 50. Двоеточие здесь означает "else".
2: В каждом цикле:
double[] vals = new double[100];
//fill x with values
for (double x : vals) {
//do something with x
}
Это устанавливает x каждому из значений в 'vals' по очереди. Так что если vals содержит [10, 20.3, 30,...], то x будет на первой итерации 10, 20.3 на второй и т.д.
Примечание. Я говорю, что это не оператор, потому что это просто синтаксис. Он не может появляться в каком-либо конкретном выражении сам по себе, и это просто шанс, что и для каждого, и для троичного оператора используется двоеточие.
Ответ 3
Просто добавьте, когда используется в цикле for-each, значение ":" можно в основном читать как "in".
Итак,
for (String name : names) {
// remainder omitted
}
следует прочитать "Для каждого имени IN имена..."
Ответ 4
Как бы вы пишете это для каждого цикла по-другому, чтобы не включать ":"?
Предполагая, что list
является экземпляром Collection
...
public String toString() {
String cardString = "";
for (Iterator<PlayingCard> it = this.list.iterator(); it.hasNext(); /**/) {
PlayingCard c = it.next();
cardString = cardString + c + "\n";
}
}
Я должен добавить педантическую точку, что :
не является оператором в этом контексте. Оператор выполняет операцию в выражении, а материал внутри оператора ( ... )
в for
не является выражением... согласно JLS.
Ответ 5
Он использовал in для циклов для перебора списка объектов.
for (Object o: list)
{
// o is an element of list here
}
Подумайте об этом как for <item> in <list>
в Python.
Ответ 6
Обычно вы видите его в тройном операторе присваивания;
Синтаксис
variable = `condition ? result 1 : result 2;`
Пример:
boolean isNegative = number > 0 ? false : true;
который является "эквивалентным" по своей природе для if else
if(number > 0){
isNegative = false;
}
else{
isNegative = true;
}
Кроме примеров, данных разными плакатами,
вы также можете использовать: для обозначения метки для блока, которую вы можете использовать в сочетании с продолжением и разрывом.
например:
public void someFunction(){
//an infinite loop
goBackHere: { //label
for(int i = 0; i < 10 ;i++){
if(i == 9 ) continue goBackHere;
}
}
}
Ответ 7
В вашем конкретном случае
String cardString = "";
for (PlayingCard c : this.list) // <--
{
cardString = cardString + c + "\n";
}
this.list
представляет собой набор (список, набор или массив), и этот код присваивает c
каждому элементу коллекции.
Итак, если this.list
были коллекцией { "2S", "3H", "4S" }, то cardString
на конце была бы следующей строкой:
2S
3H
4S
Ответ 8
Он будет печатать строку "что-то" три раза.
JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()};
for ( JLabel label : labels )
{
label.setText("something");
panel.add(label);
}
Ответ 9
Так как большинство для циклов очень похожи, Java предоставляет ярлык для сокращения количество кода, необходимое для записи цикла, называемого для каждого цикла.
Ниже приведен пример краткости для каждого цикла:
for (Integer grade : quizGrades){
System.out.println(grade);
}
В приведенном выше примере двоеточие (:) можно читать как "в". Для каждого цикла вообще можно прочитать как "для каждого элемента Integer (называемого классом) в quizGrades, распечатайте значение класса."
Ответ 10
Используется в новой короткой руке для /loop
final List<String> list = new ArrayList<String>();
for (final String s : list)
{
System.out.println(s);
}
и тернарный оператор
list.isEmpty() ? true : false;
Ответ 11
Двоеточие фактически существует в сочетании с ?
int minVal = (a < b) ? a : b;
эквивалентно:
int minval;
if(a < b){ minval = a;}
else{ minval = b; }
Также для каждого цикла:
for(Node n : List l){ ... }
буквально:
for(Node n = l.head; n.next != null; n = n.next)
Ответ 12
двоеточие используется для каждого цикла,
Попробуйте этот пример,
import java.util.*;
class ForEachLoop
{
public static void main(String args[])
{`enter code here`
Integer[] iray={1,2,3,4,5};
String[] sray={"ENRIQUE IGLESIAS"};
printME(iray);
printME(sray);
}
public static void printME(Integer[] i)
{
for(Integer x:i)
{
System.out.println(x);
}
}
public static void printME(String[] i)
{
for(String x:i)
{
System.out.println(x);
}
}
}