如何使用while循环在另一个方法上显示数组(我有null)



我在显示主题(subj(及其单位(unit(的用户输入时遇到问题。上面写着null,你认为我必须修复/添加哪个部分?如果可能的话,我可以在上面加一列吗?这样主题和单元就可以对齐了?我必须做什么/导入什么?这是我的全部代码(我是初学者(:

package com.mycompany.studentinfo;
import java.util.Scanner;
public class StudentInfo {   
static String lname, fname, mname, program, subj;
static int studentno, unit;

public static void main(String[] args){
student();
academicinfo();
academicunit();
finaloutput();
}
static void student() {
try {
System.out.println("***PROVIDE THE FOLLOWING***");
Scanner sc = new Scanner(System.in);
System.out.print("Student No: ");
studentno = sc.nextInt();
String xd = sc.nextLine();  // extra
System.out.print("Last Name: ");
lname = sc.nextLine();
System.out.print("First Name: ");
fname = sc.nextLine();
System.out.print("Middle Name: ");
mname = sc.nextLine();
}
catch (Exception x){
System.out.println("***ERROR***");
student();
}
}

static void academicinfo() {
Scanner sc = new Scanner(System.in);
String[] subj = new String[8];
System.out.print("Program: ");
program = sc.nextLine();
System.out.println("Courses: ");
int i = 0;
while (i < subj.length) {
subj[i] = sc.nextLine();
i++;
}
}

static void academicunit() {
Scanner sc = new Scanner(System.in);
int[] unit = new int[8];
System.out.println("Units in corresponding order");
int i = 0;
while (i < unit.length) {
unit[i] = sc.nextInt();
i++;
}
}

static void finaloutput() {    
System.out.println("PERSONAL INFORMATION");
System.out.println("tStudent No. " + studentno);
System.out.println("tLast Name: " + lname);
System.out.println("tFirst Name: " + fname);
System.out.println("tMiddle Name: " + mname);

System.out.println("nACADEMIC INFORMATION");
System.out.println("Program: " + program);
System.out.println("Courses: ");
System.out.println(subj); 
System.out.println(unit); 

}
}

有了这个代码,最终输出将是:

PERSONAL INFORMATION    
Student No. 123     
Last Name: asd  
First Name: asd     
Middle Name: asd
ACADEMIC INFORMATION
Program: asd
Courses:
null
0

我想做的结果是:

PERSONAL INFORMATION    
Student No. 123     
Last Name: asd  
First Name: asd     
Middle Name: asd
ACADEMIC INFORMATION
Program: asd
Courses:                    Units:
this is course              0

这是因为在方法academicInfo中,您声明并初始化了一个局部变量String[]subj,而类变量subj保持不变。您应该删除前面方法中subj的声明,并在类级别将subj声明和初始化为String数组。

public class StudentInfo {   
static String lname, fname, mname, program;
static int studentno, unit;
static String[] subj = new String[8];
...
...
static void academicinfo() {
Scanner sc = new Scanner(System.in);
System.out.print("Program: ");
program = sc.nextLine();
System.out.println("Courses: ");
int i = 0;
while (i < subj.length) {
subj[i] = sc.nextLine();
i++;
}
}
...

在方法academicInfo中,您将再次创建变量subj,但创建为String[]。我相信您希望使用第4行中声明的变量,在这种情况下,它将是这样的:

static void academicinfo() {
Scanner sc = new Scanner(System.in);
System.out.print("Program: ");
program = sc.nextLine();
System.out.println("Courses: ");
subj = sc.nextLine();
}

现在,要对齐文本,您必须使用System.out.format,将文本和分割号作为参数传递,它看起来像这样:

String courses_text = "Courses:";
String units_text = "Units:";
System.out.format("%-5d"+courses_text,1);
System.out.format("%-5d"+units_text,2);
System.out.println();
System.out.format("%-5d"+subj, 1);
System.out.format("%-5d"+unit, 2);

点击此处查看更多关于对齐的信息

最新更新