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);
}
}
错误
Press ENTER or type command to continue
InitFor.java:8: ')' expected
for(int i=7,k=999;i+((String h="hello").size())<10;i++){}
^
拼图
1。 CODE
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
}
}
2。 CODE
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!
}
}
原始问题的一部分,包含许多不同类型的分配和初始化 - 一行代码中的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");}}
答案 0 :(得分:5)
问题是变量可能不会在那里声明;变量可以在块中声明,但不能声明为表达式的一部分。但是,您可以在表达式中分配对象:
for(int i=7,k=999;i+((new String("hello")).length())<10;i++){}
对于您的计划,以下内容会更有意义:
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);
}
我还要补充一点,即使在你拥有它的情况下允许声明,变量也属于for循环的范围,因此变量在循环之后不再可见(超出范围)
答案 1 :(得分:2)
变量声明不能是表达式的一部分,它们是语句,如Java spec said so。
如果Java中存在条件初始化,那么如何确定变量是否已初始化?如何正确编译代码? (您需要了解Java编译器如何工作以了解它是不可能的)如何处理错误?有很多并发症。在您的代码中,即使变量已初始化,由于Java的范围策略,它也会在for
块之后消失。
答案 2 :(得分:1)
我认为你的作业令人困惑。你可以做到
public static void main(String[] args){
String h = null;
for(int i=7,k=999;i+((h="hello").size())<10;i++){}
System.out.println("It should be: hello = "+h);
}
='s运算符是右关联的,并将第一个参数设置为第二个参数并计算第一个参数,所以类似
a = b = c = 4
与
相同(a = (b = (c = 4)))
将c设置为4,b设置为c(现在为4),a设置为b(现为也为4)
您的一行代码可以(为了清晰起见,重新格式化)
File[] fs=null;
File f= ??? ; //you never initialize f in the for loop, you need a starting value
int t, size;
for (t=0,size=(fs=((f=f.getParentFile()).listFiles(filt))).size();
fs==null;
t++) {
if(t>maxDepth) {throw new Exception("No dir to read");}
}
}
编辑 - (虽然那是非常丑陋的代码,如果你在我的项目中检查过它,我会告诉你尽快重写它)
答案 3 :(得分:0)
Java条件初始化:
variable = (condition ? expression1 : expression2);
例如:
int max = (faces.length>curves.length ? faces.length : curves.length);