有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Joptionpane未正确输出存储值。

下面是我遇到问题的代码,它可以很好地编译和运行,但当我在joptionpane框中输入选项1)init的信息,并尝试用选项2)listinformation显示它时,它会弹出一个错误:“没有学生输入”

我想让它做的是列出所有学生、GPA和需要的jOptionPane。showMessageDialog

请帮忙

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) 个答案

  1. # 1 楼答案

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

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