程序在到达基本代码之前终止

时间:2013-10-22 21:23:18

标签: java

有一点背景,我在这里看到一个问题,关于创建一个程序,询问房间里有多少人,然后你“采访”每个人的年龄,分配给一个年龄组,然后打印他们的年龄组和该年龄组的人数。我决定尝试一下练习程序的想法,不幸的是代码在获得第一个声明之前终止,我不确定为什么。我认为这将是一个语法错误,但老实说我不知道​​,所以任何帮助都非常感谢。

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);
        }
    }
}

5 个答案:

答案 0 :(得分:2)

这对于循环不好:for(int index = 0; index == totalPeople.length; index++)

相反:for(int index = 0; index < totalPeople.length; index++)

让我们打破for循环:

  • 循环的第一部分int index = 0是初始条件。它告诉循环在循环开始时应该将索引设置为什么。
  • for循环中的第二项,在你的循环中有index == totalPeople.length,是条件语句,它告诉for循环是否保持循环,如果为true,或者如果为false则停止循环。当循环尝试开始时,您的语句将为false,因此循环永远不会开始。所以这就是你的问题所在。相反,只要索引小于数组的长度,或者使用Java index < totalPeople.length,就要告诉它继续循环。
  • 循环中的第3项(此处为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等于数组长度

时,继续执行此代码

你的意思是在索引小于数组长度时继续执行此代码