找出来自for循环的数据是否符合某个标准

时间:2014-11-10 19:41:51

标签: java variables if-statement for-loop random

我想要做的是弄清楚如何查看来自for循环的数据是否符合某个标准。我想使用if语句(除非有更好的方法),但我遇到的麻烦是数据在for循环中,代码不想要我使用该循环之外的值。这是代码:

    //Create an array called schoolEnrollment of length numberOfStudents         
    Student[] myArray = new Student[numberOfStudents];  


    //Create enough objects of type Student to fill the array above
    for (int i = 0; i < numberOfStudents; i++) {

        //Uses the instance of RandomNames to assign first and last names to each student
            //First names
            String[] firstNames1 = {"John", "Roxanne", "Dean", "Mary", "Shawn", "Sara",
                    "Peter", "Susie", "Jerry", "Juliet"};

            int idx = new Random().nextInt(firstNames1.length);
            String random = (firstNames1[idx]);

            String NextFirstName = random;

            //Last names
            String[] lastNames1 = {"Smith", "Brown", "Baker", "Doe", "Poe", "Allen", 
                    "Black", "Frederick", "Hunter", "Spencer"};

            int idx1 = new Random().nextInt(lastNames1.length);
            String random1 = (lastNames1[idx1]);

            String NextLastName = random1;


        //Randomly assign house locations to each student
        int houseLocation = (int) (0 + (Math.random() * (3 - 0)));
        //Randomly assign distance from school to each student
        int distanceFromSchool = (int) (0 + (Math.random() * (30 - 0)));;
        myArray[i] = new Student(NextFirstName, NextLastName, houseLocation, distanceFromSchool);

    }

    for (int i = 0; i < numberOfStudents; i++) {
        // display toString for each object
        System.out.println(myArray[i].toString());
    }

    //Create 4 other arrays of length numberOfStudents of type Student with the names
    //ridersOfNorthBus, ridersOfWestBus, ridersOfSouthBus, and ridersOfEastBus
    Student[] ridersOfNorthBus = new Student[numberOfStudents];

    Student[] ridersOfWestBus = new Student[numberOfStudents];

    Student[] ridersOfSouthBus = new Student[numberOfStudents];

    Student[] ridersOfEastBus = new Student[numberOfStudents];

所以,我试图做的是采取for循环随机给出的houseLocation(东,南,北或西)来查看谁将乘坐哪辆巴士。简单地尝试使用houseLocation变量不起作用,因为程序不能识别for循环之外的变量。此外,创建变量的另一个随机实例将不起作用,因为它可能不会提出相同的值。我也不能把代码放在for循环中,因为那时我的数组都会多次打印出来,这不是我想要的。有没有办法做到这一点?谢谢。

此外,不确定是否需要,但这里是包含houseLocation方法的类:

public class Student {

//Create private instance variables with setters and getters
private String firstName;
private String lastName;
private int houseLocation = 0;
private int distanceFromSchool = 0;


//Set values for private instance variable house location
public void north() {
    int North = 0;
    if (houseLocation == North)
        North = houseLocation;

}
public void west() {
    int West = 1;
    if (houseLocation == West)
        West = houseLocation;
}
public void south() {
    int South = 2;
    if (houseLocation == South)
        South = houseLocation;
}
public void east() {
    int East = 3;
    if (houseLocation == East)
        East = houseLocation;
}

5 个答案:

答案 0 :(得分:1)

你在for循环之前声明了一个myArray数组,你在for循环中填充了Student个实例:

myArray[i] = new Student(NextFirstName, NextLastName, houseLocation, distanceFromSchool);

其中一个Student属性是房屋位置。因此,您拥有for循环之外所需的所有数据。

您可以使用以下代码填充ridersOfXBus数组:

Student[] ridersOfNorthBus = new Student[numberOfStudents];
Student[] ridersOfWestBus = new Student[numberOfStudents];
Student[] ridersOfSouthBus = new Student[numberOfStudents];
Student[] ridersOfEastBus = new Student[numberOfStudents];

int northCount=0;
int southCount=0; 
int westCount=0;
int eastCount=0;

for (Student student : myArray) {
    switch (student.getHouseLocation()) {
    case 0:
        ridersOfNorthBus[northCount]=student;
        northCount++;
        break;
    case 1:
        ridersOfWestBus[westCount]=student;
        westCount++;
        break;
    case 2:
        ridersOfSouthBus[southCount]=student;
        southCount++;
        break;
    case 3:
        ridersOfEastBus[eastCount]=student;
        eastCount++;
        break;
    default:
        break;
    }
}

答案 1 :(得分:1)

您不应该使用houseLocation变量进行比较,因为它的范围仅在for循环中。相反,您应该为Student类使用getter方法来获取特定实例的houseLocation。实施例

myArray[i].getHouseLocation(); //something like this to access the houseLocation for each element (Student) of the array...

您已经在构造函数中为每个学生设置了房屋位置,只需创建或(使用您已有的getter)来访问数据。

学生班的Getter方法:

public int getHouseLocation()
{
   return this.houseLocation;
}

答案 2 :(得分:0)

看起来你想根据房屋的位置填充最后四个数组。

你是对的,你在第一个for循环中拥有房屋位置。

但您也可以使用其中一个房屋位置初始化每个Student对象。在Student构造函数中,您可以将此值保存在Student中的字段中。您可以通过Student中的方法公开此字段的值。

public class Student {
     ...
     public Student( String firstName, String lastName, 
                     int houseLocation, int distanceFromSchool ) 
     {
         ...
     }

     public int getHouseLocation() {
         return houseLocation;
     }

然后,当您遍历myArray中的Student对象时,您可以简单地调用该Student方法来获取其房屋位置,并使用它来选择哪个基于位置的数组获得学生。

答案 3 :(得分:0)

在循环的每次迭代中,您(已经)创建了一个Student类的实例,用于捕获一个学生的随机生成的详细信息。这些记录在数组myArray中,该数组在循环外声明。这些对象包含houseLocation信息,它们可以在循环外部访问,实际上您的代码已经演示过了。从他们那里获取您的房屋位置。

答案 4 :(得分:0)

您必须考虑要声明/使用的变量的范围。如果在for循环中声明了某些内容,那么只要for循环正在运行它就会存在。一旦for循环结束,在for循环范围内声明的所有变量都将消失。 我不确定你想要达到的是什么。例如,如果你的目标是填充你的4个骑手的UltraXBus阵列。您可以执行以下操作。与myArray一起声明数组(在for循环的顶部)。这样,数组将在for循环中可见。在for循环中填充学生数组(myArray)时,您可以轻松地填充ridersArrays(直接在for循环中)。因此,您可以将每个学生创建在两个阵列中(在myArray中包含所有学生,并根据他们在其中一个车手阵列中的方向)。

希望有所帮助。如果没有尝试澄清你的问题。