我想要做的是弄清楚如何查看来自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;
}
答案 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中包含所有学生,并根据他们在其中一个车手阵列中的方向)。
希望有所帮助。如果没有尝试澄清你的问题。