下面是有问题的代码我编译好并运行,但是当我在joptionpane框中输入信息时选项1)init并尝试使用选项2)listinformation显示它会弹出错误“no”学生进入“。
我想要的是用jOptionPane.showMessageDialog列出所有学生,gpas和need
请帮忙。
import javax.swing.JOptionPane;
public class Test {
public static void main (String[] args) {
String[] firstname = new String[1000];
String[] lastname = new String[1000];
double[] gpa = new double[1000];
int[] award = new int[1000];
int awardsum = 0;
boolean[] need = new boolean[1000];
int numStudent = 0;
double classaverage;
int schtotal = 0;
String choice = "";
while (!choice.equals("4")) {
choice = getMenuChoice ();
if(choice.equals("1")){
init(firstname,lastname, gpa, need, numStudent);
}else if(choice.equals("2")){
listinformation(firstname, lastname, gpa, need, numStudent);
}else if(choice.equals("3")){
total(schtotal,award, numStudent);
}
}
}//main
public static int init (String[] firstname, String[] lastname, double[] gpa, boolean[] need, int count){
do {
firstname[count] = JOptionPane.showInputDialog("First name?");
lastname[count] = JOptionPane.showInputDialog("Last name?");
gpa[count] = Double.parseDouble(JOptionPane.showInputDialog("Gp a; Input as X.XX"));
need[count] = Boolean.parseBoolean(JOptionPane.showInputDialog(" Financial need? ;True or False"));
count++;
}while (JOptionPane.showConfirmDialog(null,"Add another student?")==JOptionPane.YES_OPTION);
return count;
}//init
public static int[] awardcal(int awardsum, int[] award, double[] gpa, boolean[] need, int count){
if (count > 0){
for (int index = 0; index < count; index++){
if(gpa[index] == 4.0){
awardsum = awardsum + 1000;
award[index] = award[index] + awardsum;
}
}
}return award;
}
public static int total(int schtotal,int[]award, int count){
for(int index = 0; index < count; index ++){
schtotal = schtotal + award[index];
}
JOptionPane.showMessageDialog(null, schtotal);
return schtotal;
}
public static void listinformation(String[] firstname, String[] lastname, double[] gpa, boolean[] need, int count){
String output = "";
if (count > 0){
for (int index = 0; index < count; index++) {
output += firstname[index] + " " + lastname[index] + " " + gpa[index] + " " + need[index] + "\n";
}
}else output = "No students entered";
JOptionPane.showMessageDialog(null, output);
}
public static String getMenuChoice () {
String menu = "1) Add Student Information\n2)View info for all students\n3)Total scholarships awarded\n4) Exit";
String inputValue = JOptionPane.showInputDialog(menu);
return inputValue;
} // getMenuChoice()
}//class
答案 0 :(得分:3)
方法参数仅按值传递,因此init方法不会更改int numStudent字段。相反,局部变量,count参数只会被更改,numStudent将不受影响。您需要在init(...)
完成后检查numStudent的值,然后您会看到它保持为0.
ArrayList<Student>
来保存学生数据。那么你甚至不需要numStudent字段,但可以直接检查ArrayList的size()
。 例如:
public class CounterTest {
private static int counter1 = 0;
private static int counter2 = 0;
public static void incrCounter1ViaParameter(int counter) {
counter++; // increments the **parameter**
}
public static void incrCounter2Directly() {
counter2++; // directly increments the **static class field**
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
incrCounter1ViaParameter(counter1);
incrCounter2Directly();
}
System.out.println("Counter 1: " + counter1);
System.out.println("Counter 2: " + counter2);
}
}