代码假设打印用户输入的名称,但它只是打印空值而不是打印实际名称。我使用数组来存储名称值。
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?");
}
}
答案 0 :(得分:2)
这是因为您在fullName()
中输入和提取的名称未反映在实际数组userFirstName
,userLastName
中。
原因是,它是pass by value
。您每次都会将userFirstName[i]
的副本(实际上是null
)传递给fullName()
方法,并在那里修改本地副本。对firstName
和nLastName
所做的更改不会反映回您的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);
我希望这适合你:)