我正在尝试解决程序中的问题,但无法弄清楚如何解决它。我认为问题在于我试图输出报告的方式 - 显示ID#,然后命名:lastname,在运行报告时使用Sys.out.print行说出“学生名称”的名字+ array [2] + array [1]。
如何解决此问题?它只在我尝试运行报告时发生。输入学生信息时创建的文本文件已正确完成。
/ **
*文件名:LowerAndUpperDisplay.java
*创建时间:2013年10月31日
* 由...制作 :
*目的:展开LowerAndUpper应用程序,使disp enter code here
逐个放置每个记录
*来自lowerclassman文件,然后来自upperclassman文件。
*显示标题以介绍每个列表。
*
*对于每条记录,显示ID号,名字,姓氏,获得的积分和号码
*毕业所需的额外学分。假设毕业需要120个学分。
* /
import java.util.Scanner;
import java.nio.file.*;
import java.io.*;
public class LowerAndUpperDisplay {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Path lowerClassmanFile = Paths.get("C:/temp/lowerclassman.txt");
Path upperClassmanFile = Paths.get("C:/temp/upperclassman.txt");
char choice;
int idNum;
int totalCredits;
String first;
String last;
String classStanding = " ";
try
{
OutputStreamWriter lWriter = new OutputStreamWriter(
new BufferedOutputStream(Files.newOutputStream(
lowerClassmanFile, StandardOpenOption.CREATE)));
BufferedWriter lowerClassmanWriter = new BufferedWriter(lWriter);
OutputStreamWriter uWriter = new OutputStreamWriter(
new BufferedOutputStream(Files.newOutputStream(
upperClassmanFile, StandardOpenOption.CREATE)));
BufferedWriter upperClassmanWriter = new BufferedWriter(uWriter);
do {
System.out
.print("Student Records "
+ "\nTo enter student records, type S. For a report, type R. To exit, type Q.");
choice = input.nextLine().charAt(0);
switch (choice)
{
case 'S':
System.out.println("Please enter student information.");
System.out.print("ID Number: ");
idNum = input.nextInt();
input.nextLine();
System.out.print("First Name: ");
first = input.nextLine();
System.out.print("Last Name: ");
last = input.nextLine();
System.out.println("Credit Hours Earned: ");
totalCredits = input.nextInt();
input.nextLine();
classStanding = "ID Number " + idNum + ", Student Name: "
+ last + ", " + first + " Credit Hours: "
+ totalCredits;
if (totalCredits >= 60) {
upperClassmanWriter.write(classStanding);
upperClassmanWriter.newLine();
}
else {
lowerClassmanWriter.write(classStanding);
lowerClassmanWriter.newLine();
}
break;
case 'R':
try {
InputStreamReader lReader = new InputStreamReader(
new BufferedInputStream(Files
.newInputStream(lowerClassmanFile)));
BufferedReader reader1 = new BufferedReader(lReader);
InputStreamReader uReader = new InputStreamReader(
new BufferedInputStream(Files
.newInputStream(upperClassmanFile)));
BufferedReader reader2 = new BufferedReader(uReader);
System.out
.print("The lower classmen are: ");
classStanding = reader1.readLine();
String[] array;
while (classStanding != null) {
array = classStanding.split(",");
totalCredits = Integer.parseInt(array[3]);
System.out.print("ID Number " + array[0]);
System.out.print("Student name " + array[2] + ", " + array[1]) ;
System.out.print("Total credits: " + totalCredits);
System.out.print("This student is " + (120 - totalCredits)
+ " credits short of earning their degree.");
classStanding = reader1.readLine();
}// end while
reader1.close();
System.out.print("The upper classmen are: ");
classStanding = reader2.readLine();
while (classStanding != null) {
array = classStanding.split(",");
totalCredits = Integer.parseInt(array[3]);
//System.out.format("Student Id Number :", "");
System.out.print("ID Number " + array[0]);
System.out.print("Student name : " + array[2] + ", " + array[1]);
System.out.print("Total credits: " + totalCredits);
System.out.print("This student is " + (120 - totalCredits)
+ "credits short of earning their degree.");
classStanding = reader2.readLine();
}// end while
reader2.close();
} catch (Exception e) {
System.out.println("Message: " + e);
}
case 'Q':
break;
default:
System.out
.printf("You have made an invalid option. Please enter a valid option. \n");
}// end switch
} while (choice != 'Q');
lowerClassmanWriter.close();
upperClassmanWriter.close();
} catch (Exception e)
{
System.out
.println("The program has encountered an error. Please notify your Systems Administrator"
+ " of this error. " + e);
}
}// end
}// end class
答案 0 :(得分:0)
的ArrayIndexOutOfBounds
classStanding = "ID Number " + idNum + ", Student Name: "
+ last + ", " + first + " Credit Hours: "
+ totalCredits;
array = classStanding.split(",");
totalCredits = Integer.parseInt(array[3]);
数组只有3个索引。如果您想要最后一个,则应拨打array[2]
而不是array[3]
。
同样array[2]
是字符串" Credit Hours: " + totalCredits;
。你无法解析它。您应该再次使用split
来获取totalCredits