Java 对于每个循环;字符串不能转换为int?

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");

我需要访问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");
我的代码出了什么问题

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
(后面应该是name
St
)是一个字符串数组

让我们仔细看看您的循环:

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
(后面应该是name
St
)是一个字符串数组

让我们仔细看看您的循环:

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)这是关于能够快速阅读和推理代码。当一个人看它的时候,如果代码遵循惯例,它会使阅读和理解发生了什么变得更容易。适当的资本化为我们提供了关于事物是什么的提示,而不必回到定义上来。