Java 读取文件,然后将其转换为数组并计算数字
我有一个名为“results.txt”的文件,其中包含以下值:Java 读取文件,然后将其转换为数组并计算数字,java,arrays,file,Java,Arrays,File,我有一个名为“results.txt”的文件,其中包含以下值: 0118210:1801:XDCS1094:A:4 0118210:1801:XDCS2034:B+:4 0118210:1801:XDCS1043:C:3 0118024:1801:XDCS1094:B:4 0118024:1801:XDCS2094:A:4 我想读取该文件,使其成为一个数组,并删除分隔符,然后根据GPA公式进行计算。这是我对它应该如何工作的想法,但我仍然不太确定,因为我是编程新手。我还尝试在新行上显示我的结果,
0118210:1801:XDCS1094:A:4
0118210:1801:XDCS2034:B+:4
0118210:1801:XDCS1043:C:3
0118024:1801:XDCS1094:B:4
0118024:1801:XDCS2094:A:4
我想读取该文件,使其成为一个数组,并删除分隔符,然后根据GPA公式进行计算。这是我对它应该如何工作的想法,但我仍然不太确定,因为我是编程新手。我还尝试在新行上显示我的结果,而不是像图中所示在一行中显示所有内容。任何帮助都将不胜感激,这是一项任务
public void run()
{
try{
do{
found=0;
received = in.readLine();
array2=received.split(":");
if(received.equals("QUIT")) break;
switch(received.charAt(0))
{
case 'R':
Register();
break;
case 'L':
login();
break;
case 'V':
View();
break;
}
}while(!received.equals("QUIT"));
}
catch(IOException e)
{
e.printStackTrace();
}
public void View() throws IOException
{
String grade ="";
in3 = new BufferedReader(new FileReader("results.txt"));
while((result = in3.readLine()) !=null)
{
array4=result.split(":");
if((array2[1].equals(array4[0])) && (array2[2].equals(array4[1])))
{
grade += array4[2]+" "+array4[3]+" "+array4[4];
found=1;
}
if(found==0)
out.println("No Records");
}
out.println(grade);
GCPA();
}
public void CGPA() throws IOException{
String grade = "", cgpa = "";
int IntValue = 0, IntCH = 0, IntCGPA = 0, IntArray = 0;
if(array4[3] == "A") {
IntArray = Integer.parseInt(array4[3]);
IntValue = IntArray * 4;
} else if(array4[3] == "B") {
IntArray = Integer.parseInt(array4[3]);
IntValue = IntArray * 3;
}
IntCH += IntArray;
IntCGPA = IntValue/IntCH;
out.println(IntCGPA);
}
首先,我如何将结果放在一行中,而不是放在一行中?添加
\n
无效,当我运行程序时,它不会显示我的IntCGPA
并显示此错误
Exception in thread "Thread-0" java.lang.ArithmeticException: / by zero
at MultiClientHandler1.CGPA(MultiClientHandler1.java:95)
at MultiClientHandler1.View(MultiClientHandler1.java:81)
at MultiClientHandler1.run(MultiClientHandler1.java:116)
您只打印文件数据,而不是存储在阵列中 尝试使用一种方法将文件读入列表
private List<String[]> getDataArray(String filename) throws IOException {
List<String[]> data = new ArrayList<>();
InputStream is = getClass().getClassLoader().getResourceAsStream(filename);
Scanner sc = new Scanner(is);
while (sc.hasNextLine()) {
data.add(sc.nextLine().split(":"));
}
return data;
}
试试这个模式
StringBuilder grade = new StringBuilder();
while (...) {
// Add columns from array
grade
.append(array4[2]).append(" ")
.append(array4[3]).append(" ")
.append(array4[4]);
// End line
grade.append("\n");
}
out.println(grade.toString());
无论如何,您的代码会抛出一个异常并停止
Exception in thread "Thread-0" java.lang.ArithmeticException: / by zero
at MultiClientHandler1.CGPA(MultiClientHandler1.java:95)
它告诉您MultiClientHandler1.CGPA(MultiClientHandler1.java:95)中的类、方法和行号->,因此您可以在那里查看
想一想,“为什么我要除以零?”然后你就会明白了
IntCH = 0;
IntCH += IntArray;
这意味着IntArray
在某个点必须为零
我不太清楚你在这里想干什么
也提示:
试试这个
int ch = 0;
int credits = 0;
final int baseCredits = Integer.parseInt(array4[4]);
String grade = array4[3];
switch (grade) {
case "A":
credits = baseCredits * 4;
break;
case "B":
credits = baseCredits * 3;
break;
// etc.
}
int cGPA = baseCredits / credits;
请不要将方法和变量名大写,我建议您将
intArray
或intValue
命名为更具描述性的名称。soo您的问题是什么?好的。。首先,我如何将结果放入新行,而不是所有内容都放在一行中,例如,因为\n不起作用,并且当我运行程序时,它不会显示我的IntCGPAYour异常,在第95行清楚地显示你被零除。你可以自己轻松地解决这个问题
IntCGPA = IntValue/IntCH;
IntCH = 0;
IntCH += IntArray;
if(array4[3] == "A") { // This is the string "A"
IntArray = Integer.parseInt(array4[3]); // So, you can't parse an int from "A"
int ch = 0;
int credits = 0;
final int baseCredits = Integer.parseInt(array4[4]);
String grade = array4[3];
switch (grade) {
case "A":
credits = baseCredits * 4;
break;
case "B":
credits = baseCredits * 3;
break;
// etc.
}
int cGPA = baseCredits / credits;