我在一个问题上已经被困了一段时间,而且程序没有做我认为它应该做的事情。
当我运行程序并且它到达要求您输入课程名称的部分时,程序会跳过第一次迭代,或者其他取决于输入的课程数量。它只允许在最后一次迭代时输入。对于以下for循环,程序跳过它们而不允许输入。
我的问题是, for循环不正确,还是没有正确输入信息到其下标的String数组?
import java.util.Scanner; //Needed for Scanner class
public class StudentRecords
{
public static void main(String[] args)
{
int courses;
int students;
int[] course = new int[5];
int[] student = new int[5];
double GPA = 0;
String[] courseNumber = new String[5];
double[] creditHours = new double[5];
String[] letterGrade = new String[5];
//Scanner object for user input
Scanner kb = new Scanner(System.in);
System.out.println("This program will help you determine the GPA \n"
+ "for each student entered.");
System.out.println("");
System.out.println("How many student's GPA are you going to calculate?");
System.out.print("Enter amount of students (Maximum of 5 students): ");
students = kb.nextInt();
student = new int[students];
System.out.println("");
for(int index = 0 ; index < student.length; index++)
{
System.out.print("Student " + (index + 1) + " information: ");
System.out.println("");
System.out.print("How many courses did student " +
(index + 1) + " take? ");
courses = kb.nextInt();
course = new int[courses];
for(int i = 0; i < course.length; i++)
{
System.out.println("What is the name of course #" + (i + 1));
courseNumber[i] = kb.nextLine();
}
for(int i = 0; i < course.length; i++)
{
System.out.println("How many credit hours is " + courseNumber[i]);
creditHours[i] = kb.nextDouble();
}
for(int i = 0; i < course.length; i++)
{
System.out.println("What is the final letter grade for " + courseNumber[i]);
letterGrade[i] = kb.nextLine();
}
for( i = 0; i < student.lenght<
}
}
}
P.S。这是我正在研究的问题:
使用以下输入编写程序,所有输入都存储在其中 数组(大小为5)。首先,学生在那个学期上学了多少门课程 (不能大于5)。在ARRAYS中为每位学生存储, 课程编号/名称(例如ICT 435),学分(1-4)和 字母等级(A-F)。确定学期的GPA。
答案 0 :(得分:1)
nextLine()
Scanner
方法可能有点奇怪。我开始的Java课程提到,在检索数字(例如nextDouble()
)的方法之后,在行的末尾有一个新的行字符。下次使用nextLine()
时,它会将新行字符作为输入读取,而不是让您有机会输入任何内容。
如果你在循环前放nextLine()
询问课程名称,
kb.nextLine(); // <-- here
for(int i = 0; i < course.length; i++)
{
System.out.println("What is the name of course #" + (i + 1));
courseNumber[i] = kb.nextLine();
}
它将通过该新行。任何后续nextLine()
次调用实际上都会让您提供输入。也就是说,您也需要在字母等级循环之前执行此操作,
kb.nextLine(); // <-- here
for(int i = 0; i < course.length; i++)
{
System.out.println("What is the final letter grade for " + courseNumber[i]);
letterGrade[i] = kb.nextLine();
}
因为你在这个循环之前也要求数字。
这对我有用。希望它有所帮助!
答案 1 :(得分:0)
尝试使用:
courseNumber[i] = kb.next();
和
letterGrade[i] = kb.next();
扫描字符串时,在for
循环中。 而不是
courseNumber[i] = kb.nextLine();
和
letterGrade[i] = kb.nextLine();
有关详细信息,请参阅this link: