显然,Java中冒号以多种方式使用。有人介意解释它的作用吗?
例如这里:
String cardString = "";
for (PlayingCard c : this.list) // <--
{
cardString += c + "\n";
}
您将如何for-each
以不同的方式编写此循环,以便不合并:
?
Answers:
在Java代码中冒号有几个地方:
1)弹出标签(教程):
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)三元条件(教程):
int a = (b < 4)? 7: 8; // if b < 4, set a to 7, else set a to 8
3)每个循环(教程):
String[] ss = {"hi", "there"}
for (String s: ss) {
print(s); // output "hi" , and "there" on the next iteration
}
4)断言(指南):
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 (type) {
case WHITESPACE:
case RETURN:
break;
case NUMBER:
print("got number: " + value);
break;
default:
print("syntax error");
}
6)方法参考(教程)
class Person {
public static int compareByAge(Person a, Person b) {
return a.birthday.compareTo(b.birthday);
}}
}
Arrays.sort(persons, Person::compareByAge);
assert
不会“退出程序”。它抛出一个AssertionError
。仅当程序被扔到仅剩余的非守护程序线程的堆栈上而没有被捕获时,它才会导致程序退出。
没有“冒号”运算符,但冒号出现在两个位置:
1:在三元运算符中,例如:
int x = bigInt ? 10000 : 50;
在这种情况下,三元运算符充当表达式的“ if”。如果bigInt为true,则x将分配给它10000。如果不是,则为50。冒号在这里表示“其他”。
2:在for-each循环中:
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,依此类推。
注意:我说这不是运算符,因为它只是语法。它本身不能出现在任何给定的表达式中,并且for-each和三元运算符都可能使用冒号。
您将如何以不同的方式编写此for-each循环,以免合并“:”?
假设这list
是一个Collection
实例...
public String toString() {
String cardString = "";
for (Iterator<PlayingCard> it = this.list.iterator(); it.hasNext(); /**/) {
PlayingCard c = it.next();
cardString = cardString + c + "\n";
}
}
:
在这种情况下,我应该添加不是运算符的pedantic点。操作员在一个表达式执行操作,并且里面的东西( ... )
的for
语句不是一种表达......根据JLS。
list
是的实例Collection
;它必须是Iterable
是否可以在增强的for循环中使用的实例,这意味着它将具有iterator()
您在答案中调用的方法。
根据您的具体情况,
String cardString = "";
for (PlayingCard c : this.list) // <--
{
cardString = cardString + c + "\n";
}
this.list
是一个集合(列表,集合或数组),并且该代码将分配c
给集合的每个元素。
因此,如果this.list
有一个集合{“ 2S”,“ 3H”,“ 4S”},那么cardString
结尾将是以下字符串:
2S
3H
4S
您通常会在三元赋值运算符中看到它;
句法
variable = `condition ? result 1 : result 2;`
例:
boolean isNegative = number > 0 ? false : true;
在本质上与“其他”等效
if(number > 0){
isNegative = false;
}
else{
isNegative = true;
}
除了不同海报的例子,
您还可以使用:表示一个块的标签,可以将其与continue和break结合使用。
例如:
public void someFunction(){
//an infinite loop
goBackHere: { //label
for(int i = 0; i < 10 ;i++){
if(i == 9 ) continue goBackHere;
}
}
}
它将打印字符串“ something”三遍。
JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()};
for ( JLabel label : labels )
{
label.setText("something");
panel.add(label);
}
用于新的简写形式for / loop
final List<String> list = new ArrayList<String>();
for (final String s : list)
{
System.out.println(s);
}
和三元运算符
list.isEmpty() ? true : false;
冒号实际上与 ?
int minVal = (a < b) ? a : b;
等效于:
int minval;
if(a < b){ minval = a;}
else{ minval = b; }
同样在for每个循环中:
for(Node n : List l){ ... }
从字面上看:
for(Node n = l.head; n.next != null; n = n.next)
在for-each循环中使用冒号,请尝试以下示例,
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);
}
}
}