Java 编译错误加上一些逻辑错误需要在这里解决,但需要一个新的意见

Java 编译错误加上一些逻辑错误需要在这里解决,但需要一个新的意见,java,compiler-errors,Java,Compiler Errors,这里的任务是创建一个文件,创建一个名为Student的对象,该对象的名称为age gpa。 文件中填充的行大致类似于以下名称:Jane Robinson,age=19,gpa=3.81 在读取每一行时,我将拆分“,”和“=”,然后检查数组的每个索引中的“name”、“age”、“gpa”(如果找到其中一个),然后再对子字符串(startpostion,字符串的其余部分);将其另存为变量,为每个变量调用学生设置器并进行设置,然后将新设置的学生对象加载到名为result的arrayList中,然后我

这里的任务是创建一个文件,创建一个名为Student的对象,该对象的名称为age gpa。 文件中填充的行大致类似于以下名称:Jane Robinson,age=19,gpa=3.81 在读取每一行时,我将拆分“,”和“=”,然后检查数组的每个索引中的“name”、“age”、“gpa”(如果找到其中一个),然后再对子字符串(startpostion,字符串的其余部分);将其另存为变量,为每个变量调用学生设置器并进行设置,然后将新设置的学生对象加载到名为result的arrayList中,然后我可以返回它

现在我假设,并且只假设这可能是逻辑错误所在,在两次拆分完成后,每个文件字符串应该像这样[nameJaneRobinson][age19][gpa3.81],其中我使用[]将它们标识为数组中具有自己索引位置的单独对象

所以现在的问题是,我大部分都是编码的,但是它不起作用,我也不知道它是如何不起作用的,因为我无法编译它,我似乎无法解决这些编译错误,还有可能我缺少一个逻辑错误,但还没有发现它,因此,如果有人能为我找出任何原因,并给我一个解决方案,这将是伟大的

代码如下:

import java.util.ArrayList;
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

/**
 * 
 *
 *
 *
 */
public class StudentReader {
  public static Student[] readFromTextFile(String fileName) {
  ArrayList<Student> result = new ArrayList<Student>();
   String name =" ";
   int age = 0;
   double gpa = 0.0;
   String fill;
   
   File f = new File(fileName);
   
   try
   {
      Scanner n = new Scanner(f);
   }
  catch(FileNotFoundException ex)
   {
    ex.printStackTrace();
   }
   
   while (n.hasNextLine())
   {
     fill = n.nextLine();
     Student g =  new Student(name , age, gpa);
     String[] string1 = fill.split(",");
     
     String[][] string2 = new String[string1.length][];
     for (int i = 0; i < string1.length; ++i)
     {
       
       string2[i] = string1[i].split("=");
      if (string2[i].substring(0,4).equals("name"))
        {
      name = string2[i].substring(4,string2[i].length());
        }
      if(string2[i].substring(0,3).equals("age"))
        {
      age = Integer.parseInt(string2[i].substring(3,string2[i].length()));
        }
      if(string2[i].substring(0,3).equals("gpa"))
        {
      gpa = Double.parseDouble(string2[i].substring(3,string2[i].length()));
        }
     }
   } 
    return result.toArray(new Student[0]);
  }
}

如果所有这些问题都得到解决,那么还有另一个我似乎无法解决的错误,但在所有其他问题得到解决并解决之前,它不会显示在堆栈跟踪中:

./StudentReader.java:21: error: unreported exception FileNotFoundException; must be caught or declared to be thrown
   Scanner n = new Scanner(f);
               ^
1 error
好吧,既然是这样,我也需要循环子数组, 让我们来谈谈另外一件事,我创建2d数组只是为了解决在声明string2数组的位置抛出的错误 误差

./StudentReader.java:41: error: incompatible types: String[] cannot be converted to String
       string2[i] = string1[i].split("=");
                                    ^
1 error

我该如何解决这个问题呢?我想我需要克隆数组,但我不确定怎么做,因为我以前从来没有克隆过

你得到的都是那些
找不到符号的
,因为你认为你在字符串对象上调用字符串方法,但实际上,你在字符串类型的数组上调用它们。数组没有
length()
方法,也没有
substring()
方法等

那么这是怎么发生的呢?看看您是如何定义String2 2D阵列的:

String[][] String2 = new String[String1.length][];
看看您是如何调用字符串方法的:

name = String2[i].substring(4,String2[i].lenght());
让我们暂时忘记您拼写的
length()
不正确。主要问题是Java中的二维数组实际上是数组的数组

String2[i]
是一个数组,而不是字符串

假设我声明一个二维字符串数组,如下所示:

String[][] foo;
如果我提到

foo[0]
foo[0][1]
我得到索引0处的子数组

如果我提到

foo[0]
foo[0][1]
我从索引为0的子数组中获取位置1的元素

要遍历2D数组中的所有元素,需要两个循环,一个循环遍历子数组,另一个循环遍历每个子数组的所有元素

for(int subarrayCounter = 0; subarrayCounter < foo.length; subarrayCounter++)
{
    for(int elementCounter = 0; elementCounter < foo[subarrayCounter].length; elementCounter++)
    {
        // do stuff here
    }
}
for(int subrayCounter=0;subrayCounter
Java命名约定有以小写字母开头的变量和方法。这使得程序员更容易阅读,因此更容易调试。它应该是string2而不是string2,依此类推。最后一个错误意味着
新扫描程序(f)
应该在try语句中。