hhh*_*hhh 3 java conditional initialization declaration variable-assignment
Ruby有条件初始化.显然,Java没有或没有?我尝试更多地写作,以尽可能小地限制范围.
import java.io.*;
import java.util.*;
public class InitFor{
public static void main(String[] args){
for(int i=7,k=999;i+((String h="hello").size())<10;i++){}
System.out.println("It should be: hello = "+h);
}
}
Run Code Online (Sandbox Code Playgroud)
错误
Press ENTER or type command to continue
InitFor.java:8: ')' expected
for(int i=7,k=999;i+((String h="hello").size())<10;i++){}
^
Run Code Online (Sandbox Code Playgroud)
拼图
1.代码
import java.io.*;
import java.util.*;
public class InitFor{
public static void main(String[] args){
int k=5;
while((k=(k%3)+1)!=1){
System.out.println(k);
}
//PRINTs only 3
}
}
Run Code Online (Sandbox Code Playgroud)
2.代码
import java.io.*;
import java.util.*;
public class InitFor{
public static void main(String[] args){
int k=5;
for(;(k=(k%3)+1)!=1;){
System.out.println(k);
}
//PRINTs only 3
System.out.println(k);
// WHY DOES IT PRINT 1? Assign in for-loop!
}
}
Run Code Online (Sandbox Code Playgroud)
原始问题的一部分,有许多不同类型的赋值和初始化 - 一行代码中的100行代码
for(int t=0,size=(File[] fs=((File f=f.getParentFile()).listFiles(filt))).size();fs==null;t++){if(t>maxDepth){throw new Exception("No dir to read");}}
Run Code Online (Sandbox Code Playgroud)
问题是变量可能不会在那里声明; 变量可以在块中声明,但不能声明为表达式的一部分.但是,您可以在表达式中分配对象:
for(int i=7,k=999;i+((new String("hello")).length())<10;i++){}
Run Code Online (Sandbox Code Playgroud)
对于您的程序,以下更有意义:
public static void main(String[] args){
String h = "hello";
for(int i=7,k=999;(i+h.length())<10;i++){} // not sure what this is doing
System.out.println("It should be: hello = "+h);
}
Run Code Online (Sandbox Code Playgroud)
我还要补充一点,即使在你拥有它的情况下允许声明,变量也属于for循环的范围,因此变量在循环之后不再可见(超出范围).