-4

こんにちは、Java でレコードの配列を作成しようとしています。この配列には、町の名前、人口、居住している郡の 3 つの詳細を入力する必要があります。その前に、あなたが要求した郡に関するすべてのデータを出力します。別の町に入ると発生しないのに、町の人口に入るとnull.point.exceptionが発生する理由を誰かが教えてくれるのではないかと思っていました。

import java.util.*;
public class CathedralTowns
{
public static String name;

String population;
String county;
public static int count = 0;
public static int continuation = 0;
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
     int loop1 = 0;

    while (loop1 <= 0) {
        System.out.println("Please enter the name of the town. ('no' to end)");
        String nameEntered = input.nextLine();
        System.out.println("Please enter the county in which the town resides. ('no' to end)");
        String countyEntered = input.nextLine();
        System.out.println("Please enter the population of the town. ('no' to end)");
        String populationEntered = input.nextLine();

        if (nameEntered.equals("no") || populationEntered.equals("no") || countyEntered.equals("no") ) {
            loop1 = 5; 
            System.out.println("Thank you for entering your county.");
            continuation = 1;
        }
        WorkingDemCathedrals(nameEntered, populationEntered, countyEntered); 
    }   

}

public static void WorkingDemCathedrals(String nameEntered, String populationEntered, String countyEntered) {
    Scanner input = new Scanner(System.in);
    CathedralTowns[] allTowns = new CathedralTowns[50];
    allTowns[count] = new CathedralTowns();
    int loop2 = 0;
    int loop3 = 0;
    while (loop2 == 0){

        allTowns[count].name = nameEntered; 
        allTowns[count].population = populationEntered; //the error relates back to here according to bluej
        allTowns[count].county = countyEntered;
        if (continuation == 1) {
            loop2 = 1;
            System.out.println("please enter the name of a county for which you wish to know the details.");
            String countyOfChoice = input.nextLine();
            while (loop3 > 0){

                    if ((allTowns[loop3].county).equals(countyOfChoice)){
                        System.out.println(allTowns[loop3].name);
                        System.out.println(allTowns[loop3].population);
                        loop3 = -2;
                    }
                     loop3 = loop3 +1;   
            }
        }
        count = count + 1;

    }
}

}

4

3 に答える 3

0

この行は非常に疑わしいです

allTowns[count] = new CathedralTowns();

長さ 50 の配列を割り当てる前に行があるときに、配列内にオブジェクトを 1 つだけ割り当てます。

CathedralTowns[] allTowns = new CathedralTowns[50];

が等しいかそれ以上のArrayIndexOutOfBoundsException場合になりやすいことは言うまでもありませんcount50

次に、ループとインクリメントを開始するとcount、それが発生します。

配列全体をループして、各スロットにオブジェクトを割り当てる必要があります。

于 2013-10-21T16:33:17.577 に答える