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