Java:条件初始化?

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. 是否可以在while循环中为声明的值赋值?代码1
  2. for循环条件的赋值?代码2
  3. 条件初始化NO
  4. 你能在循环中分配不同类型的值吗?回复是的
  5. 内部循环初始化的一些规则?稍后在外部声明访问值,init怎么样? (?)

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)

Mic*_*yan 5

问题是变量可能不会在那里声明; 变量可以在块中声明,但不能声明为表达式的一部分.但是,您可以在表达式中分配对象:

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循环的范围,因此变量在循环之后不再可见(超出范围).