Java 在阵列中循环的问题

Java 在阵列中循环的问题,java,arrays,loops,Java,Arrays,Loops,我目前正在做一项家庭作业,一直进展得很顺利,直到我完成了工作表上的第4步。我不明白在移动到数组中的下一个元素时如何使代码运行。我们正在为Java开发人员使用EclipseIDE。这是作业,你可以看到我在做什么(请不要在我的问题上帮我)。(哎呀,看来我不能发布图片了。我会努力提高我的声誉) 欢迎所有意见和建议,但请不要帮助完成步骤4 以下是我到目前为止的代码(我知道数组类是不允许的,但我使用它来检查我的数组): import java.util.Scanner; 导入java.util.arr

我目前正在做一项家庭作业,一直进展得很顺利,直到我完成了工作表上的第4步。我不明白在移动到数组中的下一个元素时如何使代码运行。我们正在为Java开发人员使用EclipseIDE。这是作业,你可以看到我在做什么(请不要在我的问题上帮我)。(哎呀,看来我不能发布图片了。我会努力提高我的声誉)

欢迎所有意见和建议,但请不要帮助完成步骤4

以下是我到目前为止的代码(我知道数组类是不允许的,但我使用它来检查我的数组):

import java.util.Scanner;
导入java.util.array;
公共类阵列实践{
公共静态void main(字符串[]args)
{
沙鼠吃多少食物;
扫描仪键盘=新扫描仪(System.in);
字符串diffFoods=keyboard.nextLine();
int foodNum=Integer.parseInt(diffFoods);
字符串foodNames[]=新字符串[foodNum];
int foodMax[]=新的int[foodNum];
int j=1;
对于(int i=0;i
问题出在以下几行:

System.out.println(gerbIDs[arraycount] +" eats how many " +
                   foodNames[arraycount] +" per day?");
String gerbConsump = keyboard.nextLine();
int gerbEat1 = Integer.parseInt(gerbConsump);
gerbEat[l] = gerbEat1;
System.out.println(gerbIDs[arraycount] +" eats how many " +
                  foodNames[arraycount + 1] +" per day?");
gerbIDs
中的
arrayCount
替换为
i


如果您在
foodNames
中可能超出范围,则可能会或可能不会出现其他一些问题。使用
arraycount+1
,可能会导致超出数组末尾。您似乎根本没有递增
l

我不确定您在这里的确切意图,但我想您的问题是您忘记了递增数组计数,因为在整个程序中将其定义为零是没有意义的。你似乎也没有增加l。如果这些是常量,则通过在声明中添加final来定义它们

您似乎也有一些困惑,for循环中不需要计数器,您可以使用我在for循环中定义的int。e、 g

for(int i=0; i<10; i++){
    System.out.println(i);
}

for(int i=0;i你正在以一种非常程序化的方式处理作业。我不知道你的老师对你有什么期望,但你可能应该创建代表
FoodType
Gerbil
的类

尽管如此,这里有一些见解

问题 1.需要嵌套循环 第一个问题是,对于沙鼠吃的食物,没有使用嵌套循环。 由于食物种类的数量是动态的(由用户提供),因此您需要请求输入的次数与不同种类的数量相同

您当前重复提示代码两次:这仅在有两种食物时有效。 相反,使用迭代食物类型的
for
循环

2.数组索引混乱:
j
k
l
arrayCount
不需要 记住您正在迭代的内容:

  • 沙鼠(在阵列
    沙鼠
    沙鼠
    中)
  • 食物类型(在数组
    foodNames
    foodMax
    中)
因此,只需要两个索引:例如
g
(沙鼠)和
ft
(食物类型)

另外,
j
k
只是提供循环索引的基于1的版本
i
,您应该使用
i+1
。 这些变量是绝对不需要的,它们使代码不必要地更难阅读

3.沙鼠的食物消耗 这一行是错误的:

int gerbEat[] = new int[numGerbs];
您试图存储的是一只沙鼠每天对一种食物的消耗量。这意味着您需要一个二维数组,由我在上一节中提到的两个索引索引:

int[][] gerbEat = new int[numGerbs][foodNum];
然后,您可以通过以下表达式访问沙鼠的每日食物消费量
ft

gerbEat[g][ft]
解决办法 这是您的代码,以及我在上一部分中提到的修改:

String diffFoods = keyboard.nextLine();
int foodNum = Integer.parseInt(diffFoods);
String foodNames[] = new String[foodNum];
int foodMax[] = new int[foodNum];

for (int ft = 0; ft < foodNum; ft++) {
    System.out.println("Name of food item " + (ft+1) +":");
    foodNames[ft] = keyboard.nextLine();
    System.out.println("Maximum consumed per gerbil:");
    String maxCons = keyboard.nextLine();
    foodMax[ft] = Integer.parseInt(maxCons);
}

System.out.println("How many gerbils are in the lab?");
String gerbs = keyboard.nextLine();
int numGerbs = Integer.parseInt(gerbs);
String gerbIDs[] = new String[numGerbs];
String gerbNNs[] = new String[numGerbs];
int[][] gerbEat = new int[numGerbs][foodNum];

for (int g = 0; g < numGerbs; g++) {
    System.out.println("Gerbil " + (g+1) +"'s lab id:");
    gerbIDs[g] = keyboard.nextLine();
    System.out.println("What name did the undergrads give to " +gerbIDs[g] +"?");
    gerbNNs[g] = keyboard.nextLine();
    for (int ft = 0; ft < foodNum; ft++) {
        System.out.println(gerbIDs[g] +" eats how many " + foodNames[ft] +" per day?");
        String gerbConsump = keyboard.nextLine();
        int gerbEat1 = Integer.parseInt(gerbConsump);
        gerbEat[g][ft] = gerbEat1;
    }
}
为什么要这样做?因为收集有关实体的信息并对其进行抽象是有意义的。如果需要返回沙鼠的信息,只需返回
沙鼠
对象,就可以了。正在使用的代码请求沙鼠
String diffFoods = keyboard.nextLine();
int foodNum = Integer.parseInt(diffFoods);
String foodNames[] = new String[foodNum];
int foodMax[] = new int[foodNum];

for (int ft = 0; ft < foodNum; ft++) {
    System.out.println("Name of food item " + (ft+1) +":");
    foodNames[ft] = keyboard.nextLine();
    System.out.println("Maximum consumed per gerbil:");
    String maxCons = keyboard.nextLine();
    foodMax[ft] = Integer.parseInt(maxCons);
}

System.out.println("How many gerbils are in the lab?");
String gerbs = keyboard.nextLine();
int numGerbs = Integer.parseInt(gerbs);
String gerbIDs[] = new String[numGerbs];
String gerbNNs[] = new String[numGerbs];
int[][] gerbEat = new int[numGerbs][foodNum];

for (int g = 0; g < numGerbs; g++) {
    System.out.println("Gerbil " + (g+1) +"'s lab id:");
    gerbIDs[g] = keyboard.nextLine();
    System.out.println("What name did the undergrads give to " +gerbIDs[g] +"?");
    gerbNNs[g] = keyboard.nextLine();
    for (int ft = 0; ft < foodNum; ft++) {
        System.out.println(gerbIDs[g] +" eats how many " + foodNames[ft] +" per day?");
        String gerbConsump = keyboard.nextLine();
        int gerbEat1 = Integer.parseInt(gerbConsump);
        gerbEat[g][ft] = gerbEat1;
    }
}
class Gerbil {
    String id;
    String nickname;
    boolean bites;
    boolean escapes;
    int[] dailyFoodQuantity;
}