有 Java 编程相关的问题?

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

java代码输出NULL而不是值

代码假定打印用户输入的名称,但它只是打印空值,而不是打印实际名称。我使用数组来存储名称和值

import javax.swing.JOptionPane;

class PrintName {
    public static void main(String[] args) {

         int nameCount = Integer.parseInt(JOptionPane.showInputDialog(null, " how many NAMES you want to enter?"));
         String [] userFirstName = new String [nameCount];
         String [] userLastName = new String [nameCount];
         for (int i=0; i<nameCount; i++) {
             fullName(userFirstName[i], userLastName[i]);
         }

         for (int i=0; i<nameCount; i++) {
         JOptionPane.showMessageDialog(null, userFirstName[i] + "\n" + userLastName[i]);
    }

    public static void fullName (String firstName, String nLastName) {
        firstName = JOptionPane.showInputDialog(null, "What's your first name?");
        nLastName = JOptionPane.showInputDialog(null, "What's your last name?");
    }

}

共 (2) 个答案

  1. # 1 楼答案

    这是因为在fullName()中输入和获取的名称没有反映在实际数组userFirstNameuserLastName

    原因是,它是一个pass by value。您每次都将userFirstName[i]的副本(实际上是null)传递给fullName()方法,并在那里修改本地副本。对firstNamenLastName所做的更改不会反映回userFirstName数组

    你可以做的一件事就是修复它

    for (int i = 0; i < nameCount; i++) {
        userFirstName[i] = JOptionPane
                        .showInputDialog(null, "What's your first name?");
        userLastName[i] = JOptionPane.showInputDialog(null, "What's your last name?");
    }
    

    for循环中获取main()方法中的值

  2. # 2 楼答案

    我认为发生这种情况是因为您更改了值,而不是值指针,为此更改了fullName公司:

    public static void fullName (String[] firstName, String[] nLastName, int i) {
        firstName[i] = JOptionPane.showInputDialog("What's your first name?");
        nLastName[i] = JOptionPane.showInputDialog("What's your last name?");
    }
    

    现在您可以通过以下方式调用函数:

    fullName(userFirstName, userLastName, i);
    

    我希望这对你有用:)