Java 编译错误加上一些逻辑错误需要在这里解决,但需要一个新的意见
这里的任务是创建一个文件,创建一个名为Student的对象,该对象的名称为age gpa。 文件中填充的行大致类似于以下名称:Jane Robinson,age=19,gpa=3.81 在读取每一行时,我将拆分“,”和“=”,然后检查数组的每个索引中的“name”、“age”、“gpa”(如果找到其中一个),然后再对子字符串(startpostion,字符串的其余部分);将其另存为变量,为每个变量调用学生设置器并进行设置,然后将新设置的学生对象加载到名为result的arrayList中,然后我可以返回它 现在我假设,并且只假设这可能是逻辑错误所在,在两次拆分完成后,每个文件字符串应该像这样[nameJaneRobinson][age19][gpa3.81],其中我使用[]将它们标识为数组中具有自己索引位置的单独对象 所以现在的问题是,我大部分都是编码的,但是它不起作用,我也不知道它是如何不起作用的,因为我无法编译它,我似乎无法解决这些编译错误,还有可能我缺少一个逻辑错误,但还没有发现它,因此,如果有人能为我找出任何原因,并给我一个解决方案,这将是伟大的 代码如下:Java 编译错误加上一些逻辑错误需要在这里解决,但需要一个新的意见,java,compiler-errors,Java,Compiler Errors,这里的任务是创建一个文件,创建一个名为Student的对象,该对象的名称为age gpa。 文件中填充的行大致类似于以下名称:Jane Robinson,age=19,gpa=3.81 在读取每一行时,我将拆分“,”和“=”,然后检查数组的每个索引中的“name”、“age”、“gpa”(如果找到其中一个),然后再对子字符串(startpostion,字符串的其余部分);将其另存为变量,为每个变量调用学生设置器并进行设置,然后将新设置的学生对象加载到名为result的arrayList中,然后我
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语句中。