Java 冒号(:)操作符做什么?
显然,冒号在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<
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);
}