2015-03-30 48 views
0

我正在写两个班,一个人班和一个主要班的课程。人类使用获取和设置为六个人,然后主类要求的名称,然后向用户显示六个名称(在我的例子中,它只显示四个)。有没有可能为此使用循环?我知道我可以使用一个列表,但它是为了学校,他们希望我们使用构造函数,设置并在第一周左右。代码现在看起来像这样。这甚至可能是这样的例子,还是我需要使用列表或数组?使用get和set循环?

PersonClass.java

public class PersonClass { 

    private String namn; 

    public void setNamn(String namn) { 
     this.namn = namn; 
    } 

    public String getNamn() { 
     return namn; 
    } 
} 

MainClass.java

import javax.swing.*; 

public class MainClass { 

    public static void main(String[] args) { 
     PersonClass person1 = new PersonClass(); 
     PersonClass person2 = new PersonClass(); 
     PersonClass person3 = new PersonClass(); 
     PersonClass person4 = new PersonClass(); 

     String namn1 = JOptionPane.showInputDialog("Enter full name for person 1!"); 
     person1.setNamn(namn1); 
     String namn2 = JOptionPane.showInputDialog("Enter full name for person 2!"); 
     person2.setNamn(namn2); 
     String namn3 = JOptionPane.showInputDialog("Enter full name for person 3!"); 
     person3.setNamn(namn3); 
     String namn4 = JOptionPane.showInputDialog("Enter full name for person 4!"); 
     person3.setNamn(namn4); 


     JOptionPane.showMessageDialog(null, "Person 1: " + person1.getNamn() + 
       "\nPerson 2: " + person2.getNamn() + "\nPerson 3: " + person3.getNamn() + 
       "\nPerson 4: " + person4.getNamn()); 
    } 
} 
+4

查找到阵列。 – resueman 2015-03-30 20:41:42

+1

将'PersonClass'重命名为'Person'。它已经是一个类,在其名称中添加'Class'是多余的。功能,变量和对象的好名字有很长的路要走。 – 2015-03-30 20:54:41

回答

0
PersonClass[] persons = new PersonClass[4]; 
for(int i = 0; i < persons.length; i++){ 
    persons[i] = new PersonClass(); 
    persons[i].setNamn(JOptionPane.showInputDialog("Enter full name for person " + (i+1)); 
} 

如果对话框被关闭 - 将有null返回。

+0

@resueman感谢)忘了初始化。 – Aero 2015-03-30 21:02:29

1

,因为你的语气暗示你好我阵列是否可以认为你是不舒服的概念还没有,但也许你的老师谈论这一点,你到这里来的答案时!

PersonClass[] personArray = {person1, person2, person3, person4}; 
    for (int i = 0; i < personArray.length; i++) 
    { 
     // (i + 1) because our array starts at 0, but it's the 0 + 1th person 
     String msg = "Enter full name for person" + (i + 1); 
     personArray[i].setName(JOptionPane.showInputDialog(msg)); 
    } 
+0

谢谢你的回答,但正如我所说。稍后我们将继续讨论数组。只要找到一个答案,如果有可能循环设置并获得。 – halalbin 2015-03-30 21:06:06

0
List<PersonClass> people = new ArrayList<PersonClass>; 

for (int i = 0; i < 6; i++) { // set i to number of required people 
    PersonClass person = new PersonClass(); 
    person.setNamn(JOptionPane.showInputDialog("Enter full name for person " + (i + 1) +"!"); 

    people.add(person); 

    JOptionPane.showMessageDialog(null, person.getNamn()); 
} 

people将包含所有新PersonClass创建。用一个循环做到这一点

0

一种方法是使你的主类是这样的。看评论:

import java.util.ArrayList; 

import javax.swing.*; 

public class Main { 

    public static void main(String[] args) { 


     ArrayList<PersonClass> people = new ArrayList<PersonClass>(); 

     int index=5; 

     //Loop that will ask for 6 names 
     for(int ii=0; ii<=index; ii++){ 

      //create person object 
      PersonClass person = new PersonClass(); 

      //get/set the name 
      person.setNamn(JOptionPane.showInputDialog("Enter full name for person " + ii + " !")); 

      //save name in arraylist 
      people.add(person); 
     } 

     int count = 1; 
     //will output names via a loop 
     for(PersonClass person : people){ 
      if(person.getNamn() != null){ 
       JOptionPane.showMessageDialog(null, "Person " + count + " name: " + person.getNamn()); 
      } 
      count++; 
     } 
    } 
} 

如果是我,我会创建为PersonClass一个自定义的构造函数,它设置在施工namn

public class PersonClass { 

    private String namn; 

    //Custom constructor using a setter 
    public PersonClass(String namn){ 
     this.setNamn(namn); 
    } 
    public void setNamn(String namn) { 
     this.namn = namn; 
    } 

    public String getNamn() { 
     return namn; 
    } 
} 

然后我会做这在我的MainClass

import java.util.ArrayList; 

import javax.swing.*; 

public class Main { 

    public static void main(String[] args) { 


     ArrayList<PersonClass> people = new ArrayList<PersonClass>(); 

     int index=5; 

     //Loop that will ask for 6 names 
     for(int ii=0; ii<=index; ii++){ 
      //create, set, and add name to list 
      people.add(new PersonClass(JOptionPane.showInputDialog("Enter full name for person " + ii + " !"))); 
     } 





     int count = 1; 
     for(PersonClass person : people){ 
      if(person.getNamn() != null){ 
       JOptionPane.showMessageDialog(null, "Person " + count + " name: " + person.getNamn()); 
      } 
      count++; 
     } 
    } 
} 
1

我个人也是列表的粉丝,但阵列是一样的好选择。我建立输出,因为它有一点String.format帮助。

List<PersonClass> persons = new ArrayList<PersonClass>(); 
    String output = ""; 
    for(int i = 1; i <= 6; i++) { 
     String name = JOptionPane.showInputDialog(String.format("Enter full name for person %d!", i)); 
     PersonClass person = new PersonClass(); 
     person.setNamn(name); 
     persons.add(person); 
     output += String.format("Person %d: %s\n",i, person.getNamn()); 

    } 

    JOptionPane.showMessageDialog(null, output);