代码输出NULL而不是值

时间:2013-03-30 04:53:06

标签: java

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

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

答案 0 :(得分:2)

这是因为您在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?");
}

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

答案 1 :(得分: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);

我希望这适合你:)