Java:2-assignments-2-Initialization for循环内部不允许?
你应该用,。但只来自同一类型 例如:Java:2-assignments-2-Initialization for循环内部不允许?,java,initialization,variable-assignment,Java,Initialization,Variable Assignment,你应该用,。但只来自同一类型 例如: for ( int i=0, j= 0 ; i < something ; i++, j++) 你不能这样做: for ( int i=0, String j= "hi" ; i < something ; i++) 你应该用,。但只来自同一类型 例如: for ( int i=0, j= 0 ; i < something ; i++, j++) 你不能这样做: for ( int i=0, String j= "hi" ; i &
for ( int i=0, j= 0 ; i < something ; i++, j++)
你不能这样做:
for ( int i=0, String j= "hi" ; i < something ; i++)
你应该用,。但只来自同一类型 例如:
for ( int i=0, j= 0 ; i < something ; i++, j++)
你不能这样做:
for ( int i=0, String j= "hi" ; i < something ; i++)
您不能声明和初始化第二种类型的变量,但可以有多个变量,可能初始化为同一类型 这是在局部变量中缓存绑定的常用习惯用法:
String s = "Hello";
for (int i = 0, L = s.length(); i < L; i++) {
System.out.println(s.charAt(i));
} // prints "H", "e", "l", "l", "o"
这是映射1D-2D数组的常用习惯用法:
int[] arr1d = new int[9];
int[][] arr2d = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
};
for (int r = 0, i = 0; r < 3; r++) {
for (int c = 0; c < 3; c++) {
arr1d[i++] = arr2d[r][c];
}
}
System.out.println(Arrays.toString(arr1d));
// prints "[1, 2, 3, 4, 5, 6, 7, 8, 9]"
从两端输入两个迭代器的习惯用法也很常见:
boolean isPalindrome(String s) {
for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
if (s.charAt(i) != s.charAt(j)) {
return false;
}
}
return true;
}
您不能声明和初始化第二种类型的变量,但可以有多个变量,可能初始化为同一类型 这是在局部变量中缓存绑定的常用习惯用法:
String s = "Hello";
for (int i = 0, L = s.length(); i < L; i++) {
System.out.println(s.charAt(i));
} // prints "H", "e", "l", "l", "o"
这是映射1D-2D数组的常用习惯用法:
int[] arr1d = new int[9];
int[][] arr2d = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
};
for (int r = 0, i = 0; r < 3; r++) {
for (int c = 0; c < 3; c++) {
arr1d[i++] = arr2d[r][c];
}
}
System.out.println(Arrays.toString(arr1d));
// prints "[1, 2, 3, 4, 5, 6, 7, 8, 9]"
从两端输入两个迭代器的习惯用法也很常见:
boolean isPalindrome(String s) {
for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
if (s.charAt(i) != s.charAt(j)) {
return false;
}
}
return true;
}
你想做什么还不是很清楚。但我猜你是想在你的大字符串中找到所有出现的字符串hello。如果是,您可以尝试:
String text = "hello0123456789hello0123456789hello1234567890hello3423243423232";
String match="hello";
for(int i=0; (i = text.indexOf(match,i)) != -1;i += match.length()){
System.out.println(i);
}
输出:
0
15
30
45
我使用了重载版本,该版本以索引作为开始搜索的参数。不太清楚您想要做什么。但我猜你是想在你的大字符串中找到所有出现的字符串hello。如果是,您可以尝试:
String text = "hello0123456789hello0123456789hello1234567890hello3423243423232";
String match="hello";
for(int i=0; (i = text.indexOf(match,i)) != -1;i += match.length()){
System.out.println(i);
}
输出:
0
15
30
45
我使用了重载版本,该版本以索引作为开始搜索的参数。Polygene的答复包含值得注意的要点。如果将i++更改为++i,则增加分配顺序会更改,并且很容易出现错误
$ javac ThirdDArray.java
$ java ThirdDArray
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at ThirdDArray.main(ThirdDArray.java:17)
$ cat ThirdDArray.java
import java.util.*;
import java.io.*;
public class ThirdDArray {
public static void main(String[] args) {
int[] arr1d = new int[9];
int[][] arr2d = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
};
for (int r = 0, i = 0; r < 3; r++) {
for (int c = 0; c < 3; c++) {
//THIS IS THE TRICK POINT!
// ++i means "first increase then assignment"
// i++ means "first assignment then increase"
arr1d[++i] = arr2d[r][c];
}
}
// ERROR ONLY DUE TO THE ASSIGNMENT-INCREASE order!
System.out.println(Arrays.toString(arr1d));
// started from 1 so go out of the allocated size
}
}
Polygene的答复包含了值得注意的几点。如果将i++更改为++i,则增加分配顺序会更改,并且很容易出现错误
$ javac ThirdDArray.java
$ java ThirdDArray
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at ThirdDArray.main(ThirdDArray.java:17)
$ cat ThirdDArray.java
import java.util.*;
import java.io.*;
public class ThirdDArray {
public static void main(String[] args) {
int[] arr1d = new int[9];
int[][] arr2d = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
};
for (int r = 0, i = 0; r < 3; r++) {
for (int c = 0; c < 3; c++) {
//THIS IS THE TRICK POINT!
// ++i means "first increase then assignment"
// i++ means "first assignment then increase"
arr1d[++i] = arr2d[r][c];
}
}
// ERROR ONLY DUE TO THE ASSIGNMENT-INCREASE order!
System.out.println(Arrays.toString(arr1d));
// started from 1 so go out of the allocated size
}
}
你想对循环做什么?你想对循环做什么?不起作用。此行有多个标记-标记int的语法错误,请删除此标记,但如果删除第二个int,则会删除。@Chris:谢谢,我刚刚修复了我的答案。不起作用。此行有多个标记-标记int的语法错误,请删除此标记,但如果删除第二个int,则会删除。@Chris:谢谢,我刚刚修复了我的答案。棘手的赋值arr1d[I++]=arr2d[r][c];。显然,i++的意思是先做赋值,然后再增加,否则会出错,请参阅背诵回复。棘手的赋值arr1d[i++]=arr2d[r][c];。显然,i++的意思是先做赋值,然后再增加,否则会出现错误,请参阅背诵回复。问题是增量后与增量前。另请参见:问题是增量后与增量前。另见: