Joptionpane没有正确输出存储的值。

时间:2013-09-08 19:52:57

标签: java swing menu joptionpane

下面是有问题的代码我编译好并运行,但是当我在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

1 个答案:

答案 0 :(得分:3)

方法参数仅按值传递,因此init方法不会更改int numStudent字段。相反,局部变量,count参数只会被更改,numStudent将不受影响。您需要在init(...)完成后检查numStudent的值,然后您会看到它保持为0.

  • 一种解决方案是不将其作为参数传递,而是使用类字段(对于基于静态方法的程序,静态字段)并直接在init方法中进行。
  • 更好的解决方案是创建一个Student类,然后使用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);

   }
}