有一点背景,我在这里看到一个问题,关于创建一个程序,询问房间里有多少人,然后你“采访”每个人的年龄,分配给一个年龄组,然后打印他们的年龄组和该年龄组的人数。我决定尝试一下练习程序的想法,不幸的是代码在获得第一个声明之前终止,我不确定为什么。我认为这将是一个语法错误,但老实说我不知道,所以任何帮助都非常感谢。
import java.util.Scanner;
public class UnkownProjects {
public static void main(String[] args){
Scanner stringInput = new Scanner(System.in);
Scanner numInput = new Scanner(System.in);
System.out.println("How many people are in the room?");
int amountOfPeople = numInput.nextInt();
int[] totalPeople = new int[amountOfPeople];
System.out.println("Test");
for(int index = 0; index == totalPeople.length; index++){
System.out.println("Please enter an age for each person in the room:");
int ageOfPerson = numInput.nextInt();
ageOfPerson = totalPeople[index];
System.out.println("Test");
}
for(int index = 0; index == totalPeople.length; index++){
if(totalPeople[index] < 20 && totalPeople[index] > 0){
int[] underTwenty = null;
underTwenty[index] = totalPeople[index];
System.out.println("Test");
}
}
}
}
我也知道间距有点偏,但我只是复制/粘贴,并试图让它看起来很漂亮,所以不要担心。哦,'println'语句只是检查并查看程序终止的位置。
输出:
房间里有多少人?
(你会在这里输入一个号码)
测试
Ninja编辑:
决定我应该回到这篇文章,并将完成的代码放在这里给遇到这个问题的任何人,并希望看看成品。
import java.util.InputMismatchException;
import java.util.Scanner;
public class InterviewClass {
public static void main(String[] args){
try{
Scanner numInput = new Scanner(System.in);
System.out.println("How many people are in the room? (Ex: 5, 10, 24)");
int totalPeopleInRoom = numInput.nextInt();
int[] agesOfPeopleInRoom = new int[totalPeopleInRoom];
int youngPeople = 0, middleAged = 0, oldPeople = 0, deadPeople = 0;
System.out.println("Please enter an age for " + totalPeopleInRoom + " people (Ex: 17, 21, 45):");
for(int index = 0; index < agesOfPeopleInRoom.length; index++){
int tempAgePlaceHolder = numInput.nextInt();
agesOfPeopleInRoom[index] = tempAgePlaceHolder;
if((index + 1) == (totalPeopleInRoom/2)){
System.out.println("Half way there!");
}
}
System.out.println("Age Group\tAmount In Group");
for(int index = 0; index < agesOfPeopleInRoom.length; index++){
if(agesOfPeopleInRoom[index] < 30 && agesOfPeopleInRoom[index] > 0){
youngPeople = youngPeople + 1;
}
if(agesOfPeopleInRoom[index] < 60 && agesOfPeopleInRoom[index] > 30){
middleAged = middleAged + 1;
}
if(agesOfPeopleInRoom[index] < 115 && agesOfPeopleInRoom[index] > 60){
oldPeople = oldPeople + 1;
}
else if(agesOfPeopleInRoom[index] < 0 || agesOfPeopleInRoom[index] > 115){
deadPeople = deadPeople + 1;
}
}
System.out.println("Young People:\t" + youngPeople);
System.out.println("Middle Aged:\t" + middleAged);
System.out.println("Old People:\t" + oldPeople);
System.out.println("Dead People:\t" + deadPeople);
System.out.print("Total People:\t");
System.err.println(totalPeopleInRoom);
}catch(InputMismatchException inputException){
System.err.println("[ERROR] Wrong type of input used: " + inputException);
}
}
}
答案 0 :(得分:2)
这对于循环不好:for(int index = 0; index == totalPeople.length; index++)
相反:for(int index = 0; index < totalPeople.length; index++)
让我们打破for循环:
int index = 0
是初始条件。它告诉循环在循环开始时应该将索引设置为什么。index == totalPeople.length
,是条件语句,它告诉for循环是否保持循环,如果为true,或者如果为false则停止循环。当循环尝试开始时,您的语句将为false,因此循环永远不会开始。所以这就是你的问题所在。相反,只要索引小于数组的长度,或者使用Java index < totalPeople.length
,就要告诉它继续循环。 index++
)告诉循环在每个循环完成时如何处理索引。在这里你要告诉它增加一个,这很好。答案 1 :(得分:1)
for(int index = 0; index == totalPeople.length; index++)
应该是
for(int index = 0; index < totalPeople.length; index++)
否则布尔条件被评估为false,因此循环不执行
您应该阅读this。
for语句的一般形式可表示如下:
for (initialization; termination; increment) { statement(s) }
使用此版本的for语句时,请记住:
1.初始化表达式初始化循环;循环开始时,它执行一次 2.当终止表达式的计算结果为false时,循环终止 3.每次迭代循环后调用递增表达式;这个表达式增量是完全可以接受的 或减少价值。
答案 2 :(得分:1)
for
循环条件必须为true
才能进行迭代;它会在false
时爆发。在你的情况下,它立即false
,因此它永远不会执行。
而不是
for(int index = 0; index == totalPeople.length; index++){
试
for(int index = 0; index < totalPeople.length; index++){
同样适用于其他for
循环。
在Java tutorial on for
loops中,它说明了这一点:
当终止表达式的计算结果为false时,循环终止。
答案 3 :(得分:1)
for(int index = 0; index == totalPeople.length; index++){
括号中的第二部分不是停止条件,是继续检查。使用:
for(int index = 0; index < totalPeople.length; index++){
答案 4 :(得分:0)
你的for循环说 当index等于数组长度
时,继续执行此代码你的意思是在索引小于数组长度时继续执行此代码