Java 对于每个循环;字符串不能转换为int?
我需要访问2D数组并在那里写入一些信息。我想为每个循环使用。 这是我的密码。但在执行时,它说Java 对于每个循环;字符串不能转换为int?,java,foreach,Java,Foreach,我需要访问2D数组并在那里写入一些信息。我想为每个循环使用。 这是我的密码。但在执行时,它说 q13.java:24: error: incompatible types: String[] cannot be converted to int wi.write(St[a][b] + "\t");
q13.java:24: error: incompatible types: String[] cannot be converted to int
wi.write(St[a][b] + "\t");
^
q13.java:24: error: incompatible types: String[] cannot be converted to int
wi.write(St[a][b] + "\t");
我的代码出了什么问题
import java.io.*;
class q13{
public static void main(String[] args)
{
String St[][]={ {"STUDENT NO", "STII", "SPD", "PS", "DCCNII", "SEI"},
{"DIT/10/C1/0001", "A", "A-", "B+", "A", "A"},
{"DIT/10/M2/0123", "C-" ,"C" ,"B" ,"B", "B+"},
{"DIT/10/M1/0054", "D" ,"C-" ,"C" ,"B-", "B"},
{"DIT/10/M1/0025", "A" ,"A" ,"A-", "A", "A"},
{"DIT/10/C2/1254", "C" ,"C-" ,"B" ,"B+", "B"} };
try{
BufferedWriter wi = new BufferedWriter(new FileWriter(".\\st_info.txt"));
for(String[] a:St)
{
for(String[] b:St)
{
wi.write(St[a][b] + "\t");
}
wi.write("\r\n");
wi.newLine();
}
wi.close();
}
catch(IOException ex)
{
System.out.print(ex);
}
}
}
使用
a
和b
作为数组的索引没有意义-它们本身就是String[]
变量-检查声明
如果您试图迭代数组中的每个元素,我怀疑您想要:
for(String[] a : St)
{
for(String b : a)
{
wi.write(b + "\t");
}
wi.write("\r\n");
wi.newLine();
}
(我还强烈建议您遵循正常的Java命名转换,使用比“st”更有意义的名称)使用
a
和b
作为数组的索引没有意义-它们本身就是String[]
变量-检查声明
如果您试图迭代数组中的每个元素,我怀疑您想要:
for(String[] a : St)
{
for(String b : a)
{
wi.write(b + "\t");
}
wi.write("\r\n");
wi.newLine();
}
(我还强烈建议您遵循正常的Java命名转换,使用比“st”更有意义的名称)当您调用(string[]a:st)时,您正在访问每个字符串。这就是您得到显示的错误的原因。解决此问题的快速方法是手动迭代循环中的每个元素,并调用循环索引,如下所示:
import java.io.*;
class q13{
public static void main(String[] args)
{
String St[][]={ {"STUDENT NO", "STII", "SPD", "PS", "DCCNII", "SEI"},
{"DIT/10/C1/0001", "A", "A-", "B+", "A", "A"},
{"DIT/10/M2/0123", "C-" ,"C" ,"B" ,"B", "B+"},
{"DIT/10/M1/0054", "D" ,"C-" ,"C" ,"B-", "B"},
{"DIT/10/M1/0025", "A" ,"A" ,"A-", "A", "A"},
{"DIT/10/C2/1254", "C" ,"C-" ,"B" ,"B+", "B"} };
try{
BufferedWriter wi = new BufferedWriter(new FileWriter(".\\st_info.txt"));
int i = 0;
for(String[] a:St)
{
int j = 0;
for(String[] b:St)
{
wi.write(St[i][j] + "\t");
j++;
}
i++;
wi.write("\r\n");
wi.newLine();
}
wi.close();
}
catch(IOException ex)
{
System.out.print(ex);
}
}
}
调用(string[]a:St)时,您正在访问每个字符串。这就是您得到显示的错误的原因。解决此问题的快速方法是手动迭代循环中的每个元素,并调用循环索引,如下所示:
import java.io.*;
class q13{
public static void main(String[] args)
{
String St[][]={ {"STUDENT NO", "STII", "SPD", "PS", "DCCNII", "SEI"},
{"DIT/10/C1/0001", "A", "A-", "B+", "A", "A"},
{"DIT/10/M2/0123", "C-" ,"C" ,"B" ,"B", "B+"},
{"DIT/10/M1/0054", "D" ,"C-" ,"C" ,"B-", "B"},
{"DIT/10/M1/0025", "A" ,"A" ,"A-", "A", "A"},
{"DIT/10/C2/1254", "C" ,"C-" ,"B" ,"B+", "B"} };
try{
BufferedWriter wi = new BufferedWriter(new FileWriter(".\\st_info.txt"));
int i = 0;
for(String[] a:St)
{
int j = 0;
for(String[] b:St)
{
wi.write(St[i][j] + "\t");
j++;
}
i++;
wi.write("\r\n");
wi.newLine();
}
wi.close();
}
catch(IOException ex)
{
System.out.print(ex);
}
}
}
请注意,St
(后面应该是nameSt
)是一个字符串数组
让我们仔细看看您的循环:
for(String[] a : St) { // a is an array
for(String[] b : St) { //b is an array (unrelated to a)
wi.write(St[a][b] + "\t"); //error, a and b are arrays
第一个循环应该在数组上循环,内部循环现在将在数组上循环,其中包括字符串:
for(String[] a : St) { // a is an array
for(String b : a) { //b is a String
wi.write(b + "\t");
请注意,St
(后面应该是nameSt
)是一个字符串数组
让我们仔细看看您的循环:
for(String[] a : St) { // a is an array
for(String[] b : St) { //b is an array (unrelated to a)
wi.write(St[a][b] + "\t"); //error, a and b are arrays
第一个循环应该在数组上循环,内部循环现在将在数组上循环,其中包括字符串:
for(String[] a : St) { // a is an array
for(String b : a) { //b is a String
wi.write(b + "\t");
这里的答案似乎已经提到了代码中的错误。然而,它只触及你的铸造错误的原因 简而言之,您正试图使用字符串[]和字符串作为索引来调用数组的索引。例如,您的代码相当于以下内容
String[] array = {"My", "first", "array"};
String stringFromArray = array["first"];
您正试图使用字符串(第一个for-each循环中的字符串[])调用数组的索引
为了获得数组中的项,必须使用它的索引位置(在java中从位置0开始)调用它。
以下是调用特定索引的正确用法
// index [0] [1] [2]
String[] array = {"My", "first", "array"};
String positionZero = array[0];
String positionOne = array[1];
String positionTwo = array[2];
您的输出将分别是“My”、“first”和“array” 这里的答案似乎已经提到了代码中的错误。然而,它只触及你的铸造错误的原因 简而言之,您正试图使用字符串[]和字符串作为索引来调用数组的索引。例如,您的代码相当于以下内容
String[] array = {"My", "first", "array"};
String stringFromArray = array["first"];
您正试图使用字符串(第一个for-each循环中的字符串[])调用数组的索引
为了获得数组中的项,必须使用它的索引位置(在java中从位置0开始)调用它。
以下是调用特定索引的正确用法
// index [0] [1] [2]
String[] array = {"My", "first", "array"};
String positionZero = array[0];
String positionOne = array[1];
String positionTwo = array[2];
您的输出将分别是“My”、“first”和“array” 哪一条是24号线?如果适用,请突出显示并可能添加更多标记(我已经添加了Java标记;通常情况下,我会错过您的问题)。按照Java惯例,以大写字母开头类名。您正在
St[a][b]
处使用字符串作为整数a
和b
应该是整数。@barq和字段(如St
)不。。。(对OP)这是关于能够快速阅读和推理代码。当一个人看它的时候,如果代码遵循惯例,它会使阅读和理解发生了什么变得更容易。适当的大写字母可以为我们提供关于事物是什么的提示,而不必回到定义上来。第24行是哪一行?如果适用,请突出显示并可能添加更多标记(我已经添加了Java标记;通常情况下,我会错过您的问题)。按照Java惯例,以大写字母开头类名。您正在St[a][b]
处使用字符串作为整数a
和b
应该是整数。@barq和字段(如St
)不。。。(对OP)这是关于能够快速阅读和推理代码。当一个人看它的时候,如果代码遵循惯例,它会使阅读和理解发生了什么变得更容易。适当的资本化为我们提供了关于事物是什么的提示,而不必回到定义上来。