在过去的3个小时里,我一直在忙着做作业,但进展并不顺利。我想知道是否有人可以帮助我朝着正确的方向前进。
分配是从文件中读取数据并将其转换为对读者更友好的内容。数据文件如下所示:
0.30 0.30 0.40
161
3333 70 60 50
4444 50 50 50
5555 80 90 80
0
162
1212 90 85 92
6666 60 80 90
7777 90 90 90
8888 95 87 93
9999 75 77 73
0
263
2222 90 65 75
8989 60 40 60
9090 70 80 30
0
该文件包含5种不同类型的数字。
1.三位数是课程号。
2.四位数的数字是学生编号。
这两位数字是每个学生的作业,中期和期末考试的分数。
顶部的小数点用于查找分数的加权平均值。
零是课程之间的中断。
我应该读取文件中的所有数据,然后格式化并输出它,以便于阅读:
Grade Data For Class 161
ID Programs Midterm Final Weighted Average Programs grade
-- -------- ------- ----- ---------------- --------------
3333 70 60 50 59.00 Pass
4444 50 50 50 50.00 Fail
5555 80 90 80 83.00 Pass
Class Average: 64.00
我有扫描仪设置程序,能够解析文本中的数字,我的问题是它们都保存为字符串,所以我无法对其进行任何数学检查。我开始怀疑这是否是解决此问题的最佳方法。
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
public class classAverage
{
public static void main(String[] args) throws IOException
{
//in variable equals entire file
Scanner in = new Scanner(new File("courseData.txt"));
int classID;
System.out.println("ID Programs Midterm Final Weighted Average Programs Grade");
System.out.println("-- -------- ------- ----- ---------------- --------------");
while(in.hasNextLine()) //While file has new lines
{
//line equals each line of text
String line = in.nextLine();
Scanner lineParser = new Scanner(line);
System.out.println(line);
for(; lineParser.hasNext();)
{
//number = each number
String number = lineParser.next();
System.out.println(number);
if(number < 1 && number > 0)
{
double programsAverage = number.nextDouble();
double midtermAverage = number.nextDouble();
double finalAverage = number.nextDouble();
System.out.println(programsAverage);
System.out.println(midtermAverage);
System.out.println(finalAverage);
}
}
}
}
}
更新我已经包含了更新的代码。我现在的问题是我的for陈述书中的条件。这些应检查传入的扫描器数据的值,以查看数据是否为:
体重计算器(0,1)
分数(1,100),
一个classNumber(100,400),
一个studentNumber(1000,9999),
类分隔符(0)。
我在想类似的东西:
for(in.next(); in 1; next());
不过,这还没有做到。
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
/**
* Write a description of class classAverage here.
*
* @author
* @version
*/
public class classAverage
{
public static void main(String[] args) throws IOException
{
//in variable equals entire file
Scanner in = new Scanner(new File("courseData.txt"));
int classNumber;
int studentNumber;
int programs;
int midterm;
int finals;
double programWeight = in.nextDouble();
double midtermWeight = in.nextDouble();
double finalWeight = in.nextDouble();
//System.out.println(programWeight + " " + midtermWeight + " " + finalWeight);
for(int k = 0; k < 3; k++)
{
for(int i = 0; i <= 0; i++)
{
classNumber = in.nextInt();
System.out.println("Grades for class: " + classNumber);
System.out.println(" ID Programs Midterm Final Weighted Average Programs Grade");
System.out.println(" -- -------- ------- ----- ---------------- --------------");
}
int studentCount = 0;
double sumAverage = 0.0;
for(int j = 0; j <= 2; j++)
{
studentNumber = in.nextInt();
programs = in.nextInt();
midterm = in.nextInt();
finals = in.nextInt();
studentCount++;
double weightedAverage = (programWeight * programs) + (midtermWeight * midterm) + (finalWeight * finals);
sumAverage += weightedAverage;
System.out.printf("%d %d %d %d %.2f ", studentNumber,programs,midterm,finals,weightedAverage);
if(programs >= 70)
{
System.out.print("PASS");
} else {
System.out.print("FAIL");
}
System.out.println();
}
double classAverage = sumAverage / studentCount;
System.out.printf("Class average is: %.2f", classAverage);
System.out.println("\n\n");
}
}
}
最佳答案
您在这里有2个选择:
使用Scanner#hasNextInt()
和nextInt()
而不是nextLine()
直接读取Integers
而不是字符串格式的数字。
保持阅读/扫描代码完整。使用Integer.parseInt()
将String转换为Integers。 ->首选解决方案。由于效率更高。