Java 冒号(:)操作符做什么?

Java 冒号(:)操作符做什么?,java,for-loop,foreach,operators,colon,Java,For Loop,Foreach,Operators,Colon,显然,冒号在Java中有多种使用方式。有人能解释一下它的作用吗 例如: String cardString = ""; for (PlayingCard c : this.list) // <-- { cardString += c + "\n"; } String-cardString=”“; for(PlayingCard c:this.list)//它用于新的/loop缩写 final List<String> list = new ArrayList<

显然,冒号在Java中有多种使用方式。有人能解释一下它的作用吗

例如:

String cardString = "";
for (PlayingCard c : this.list)  // <--
{
    cardString += c + "\n";
}
String-cardString=”“;

for(PlayingCard c:this.list)//它用于新的/loop缩写

final List<String> list = new ArrayList<String>();
for (final String s : list)
{
   System.out.println(s);
}
没有“冒号”操作符,但冒号出现在两个位置:

1:在三元运算符中,例如:

int x = bigInt ? 10000 : 50;
在这种情况下,三元运算符充当表达式的“if”。如果bigInt为true,那么x将被分配10000。如果没有,则为50。这里的冒号表示“else”

2:对于每个循环,在a中:

double[] vals = new double[100];
//fill x with values
for (double x : vals) {
    //do something with x
}
for(Node n : List l){ ... }
这将依次为“VAL”中的每个值设置x。因此,如果VAL包含[10,20.3,30,…],那么x在第一次迭代中为10,在第二次迭代中为20.3,以此类推


注意:我说它不是运算符,因为它只是语法。它不能单独出现在任何给定的表达式中,而且很可能for-each和三元运算符都使用冒号。

它在for循环中用于迭代对象列表

for (Object o: list)
{
    // o is an element of list here
}

可以将其视为Python中的

冒号实际上与
一起存在?

int minVal = (a < b) ? a : b;
字面上:

for(Node n = l.head; n.next != null; n = n.next)

Java代码中使用冒号有几个地方:

1) 跳出标签():

4) 断言():

5) switch语句()中的大小写:

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;
          }
     }
}
public函数(){
//无限循环
goBackHere:{//label
对于(int i=0;i<10;i++){
如果(i==9)继续返回此处;
}
}
}

在您的特定情况下

String cardString = "";
for (PlayingCard c : this.list)  // <--
{
    cardString = cardString + c + "\n";
}
您将如何以不同的方式为每个循环编写此代码,以便不合并“:”

假设
列表
是一个
集合
实例

public String toString() {
   String cardString = "";
   for (Iterator<PlayingCard> it = this.list.iterator(); it.hasNext(); /**/) {
      PlayingCard c = it.next();
      cardString = cardString + c + "\n";
   }
}
公共字符串toString(){
字符串cardString=“”;
for(Iterator it=this.list.Iterator();it.hasNext();/**/){
PlayingCard c=it.next();
cardString=cardString+c+“\n”;
}
}


我应该补充一点,即
在这种情况下不是运算符。运算符在表达式中执行操作,而
for
语句中
(…)
中的内容不是表达式。。。根据JLS.

只需补充一点,当在for-each循环中使用“:”时,基本上可以理解为“in”

所以

应该读为“对于名称中的每个名称,请执行…”

它将打印字符串“something”三次

JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()};                   

for ( JLabel label : labels )                  
 {              
   label.setText("something");  

 panel.add(label);             
 }

冒号用于每个循环, 试一试这个例子,

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);
                   }
       }
}

因为大多数for循环都非常相似,所以Java提供了一种快捷方式来减少 编写称为for each循环的循环所需的代码量

下面是每个循环的简明示例:

for (Integer grade : quizGrades){
      System.out.println(grade);
 }    
在上面的例子中,冒号(:)可以读作“In”。每个循环的 对于中的每个整数元素(称为等级),总共可以理解为

quizGrades,把等级的值打印出来。”

我不知道这是新的。。。什么时候送来的?@Mechko,在Java 5中:哦。。。那是6年前。。。从我的参照系来看,这并不新鲜:我和小猪在一起——六年意味着它几乎从时间的黎明就已经存在了。很好——我错过了一些!我甚至不知道你可以这样命名断言,非常有用。来自.NET(C#),与所讨论的结构最接近的类比应该是for each,这一点你解释得很好。失败的
断言
不会“退出程序”。它抛出一个
AssertionError
。它只会导致程序退出,如果它被抛出到剩下的唯一非守护进程线程的堆栈上。。。如果您的目标是包含所有,那么我将添加双冒号(::)运算符。此外,在方法引用中使用双冒号。谢谢您的回答。如何将此代码重写为不使用“:”?其他人已经提到,这种情况是针对每个循环的。要更详细地解释它是如何工作的,请参阅我很抱歉,但这是一个糟糕的例子。为什么不写布尔值isNegative=number>0;三元条件适用于double sgn=number>0?1 :0;@user44242 lol是的,我甚至不记得为什么我给出了那个例子。@user44242显示了这样一个例子,使它保持简单,更好地显示了条件运算符是如何工作的。“为什么你不写布尔值isNegative=number>0;”因为这并没有说明关于三元运算符的任何内容。我的问题是:为什么?为什么要长期做同样的事情?@RichN-他不想做,他只是想知道如何做。不是作业,我想知道如何长期做,这样我才能理解逻辑。事实上,在我(糟糕的)大学里,在计算机工程学习期间,他们从未教过我们任何关于java课程中(:)的内容,后来我通过看例子来学习它,不幸的是,现在我很难把它记在心里,因为我在大学里做了所有的项目。你不需要假设
list
Collection
的一个例子;如果它能够在增强的for循环中使用,则它必须是
Iterable
的一个实例,这意味着它将具有您在答案中调用的
iterator()
方法。下半部分帮助,这应该是真正的答案+1,更详细地解释它在每个循环中所做的事情
boolean isNegative = number > 0 ? false : true;
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;
          }
     }
}
String cardString = "";
for (PlayingCard c : this.list)  // <--
{
    cardString = cardString + c + "\n";
}
2S
3H
4S
public String toString() {
   String cardString = "";
   for (Iterator<PlayingCard> it = this.list.iterator(); it.hasNext(); /**/) {
      PlayingCard c = it.next();
      cardString = cardString + c + "\n";
   }
}
for (String name : names) {
    // remainder omitted
}
JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()};                   

for ( JLabel label : labels )                  
 {              
   label.setText("something");  

 panel.add(label);             
 }
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);
                   }
       }
}
for (Integer grade : quizGrades){
      System.out.println(grade);
 }