2014-02-06 2 views
0

У меня проблемы с индексом за пределами моей программы. Предполагается, что цикл for в методе внизу должен проходить столько раз, сколько указано в методе flightSeatingAmount(). Но я все время получаю сообщение об ошибке при запуске программы для тестирования. Иногда я получаю один или два выхода, прежде чем он выдает ошибки, а в других случаях я не получаю никакого вывода, просто ошибка. Вот мой код:Индекс Java из связанной ошибки

import java.io.FileNotFoundException; 
import java.io.PrintWriter; 

public class OLE1 { 

static String[] airports = {"LAX", "MSP", "FAR", "ATL", "ORD", "DFW", "DEN", "JFK", "SFO", "CLT", "LAS", "PHX", "IAH", "MIA", "PEK", "CAN", "HND", "HKG", "SIN", "LHR", "CDG", "LGW", "MUC", "FRA", "EDI"}; 
static final int numberOfEntries = 10000; 
static String[] firstNames = {"Isis", "Donnette", "Reyes", "Willis", "Kathy", "Elizbeth", "Long", "Jim", "Devorah", "Magda", "Maryetta", "Keturah", "Corrinne", "Shena", "Xiao", "Otha", "Hallie", "Pennie", "Dong", "Kristopher", "Eveline", "Ardella", "Tien", "Tianna", "Loren", "Many", "Anjelica", "Cecile", "Mae", "Jenae", "Sonya", "Dotty", "Florance", "Mittie", "Katia", "Nena", "Lu", "Janee", "Armando", "Leandro", "Claris", "Claudine", "Moriah", "Eddie", "Susan", "Rhoda", "Monnie", "Emelia", "Cory", "Ying"}; 
static String[] lastNames = {"Belva", "Nam", "Liz", "Jeanett", "Corine", "Abe", "Olga", "Olevia", "Ernestine", "Joanne", "Sharyn", "Heidi", "Zachariah", "Sylvester", "Luetta", "Stephaine", "Garrett", "Debby", "Judi", "Noe", "Maybelle", "Eldora", "Roseann", "Madge", "Glayds", "Eleonore", "Josephine", "Quincy", "Alyson", "Earlene", "Clementina", "Jeri", "Kristel", "Carrol", "Zona", "Eileen", "Margherita", "Joline", "Terence", "Christinia", "Eldon", "Arleen", "Aimee", "Chanda", "Carin", "Prudence", "Tanja", "Kathlene", "Kareen", "Geneva"}; 
static String[] middleInitial = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}; 
static int day = (int)(Math.random() * 21); 

public static void main(String args[]) throws FileNotFoundException { 

    System.out.println("Welcome to the airplane program. This program will go ahead and create a list of all the passengers that have gone through 25 different airports."); 
    System.out.println("The list of the airports we keep track of are listed below\n"); 

    //for listing out the airport names 
    int count = 0; 
    for (int i = 0; i < 5; i++) { 
     System.out.print(airports[count]); 
     count++; 
     System.out.print(" | " + airports[count]); 
     count++; 
     System.out.print(" | " + airports[count]); 
     count++; 
     System.out.print(" | " + airports[count]); 
     count++; 
     System.out.println(" | " + airports[count]); 
     count++; 
    } 

    flightManifest(); 

} 

public static int flightSeatingAmount() { 
    int flight = (int)(50 + (Math.random() * 800)); 
    return flight; 
} 

public static String nameGenerator() { 
    String names = ""; 
    int firstAndLast = (int)(Math.random() * 50); 
    int initial = (int)(Math.random() * 26); 
    names = lastNames[firstAndLast] + "," + firstNames[firstAndLast] + "," + middleInitial[initial]; 
    return names; 
} 

public static int flightTimeIntervel() { 
    int timing[] = {15, 30, 45, 00}; 
    int randomTiming = (int)(Math.random() * 4); 
    return timing[randomTiming]; 
} 

public static int airportSelectionOne() { 
    int airportOne = (int)(Math.random() * 49); 
    return airportOne; 
} 

public static int airportSelectionTwo() { 
    int airportTwo = (int)(Math.random() * 49); 
    return airportTwo; 
} 

public static void flightManifest() throws FileNotFoundException { 

    System.out.println(flightSeatingAmount()); 
    for (int i = 0; i <= flightSeatingAmount(); i++) { 
     System.out.println(nameGenerator() + "," + "0" + "," + airports[airportSelectionOne()]); 
    } 

} 

} 

Вот выход я получаю:

Welcome to the airplane program. This program will go ahead and create a list of all   the passengers that have gone through 25 different airports. 
The list of the airports we keep track of are listed below 

LAX | MSP | FAR | ATL | ORD 
DFW | DEN | JFK | SFO | CLT 
LAS | PHX | IAH | MIA | PEK 
CAN | HND | HKG | SIN | LHR 
CDG | LGW | MUC | FRA | EDI 
843 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 45 
    at OLE1.flightManifest(OLE1.java:70) 
    at OLE1.main(OLE1.java:33) 

843 имеет в виду, сколько раз предполагается цикл для выполнения.

ответ

1

Ваш аэропортSelectionOne вернулся 45. В вашем аэродромном массиве нет 46 аэропортов. Это означает, что вы прошли мимо конца массива, что является незаконным. Измените свою функцию, чтобы она никогда не возвращала число, превышающее размер массива. Подсказка: вы можете указать размер массива по airports.length

+0

Эта ошибка полностью запамятовал. Я даже не стал смотреть туда. Спасибо за вашу помощь! – user1881401

0

Вы имеете проблемы с этим контуром:

for (int i = 0; i <= flightSeatingAmount(); i++) { 
     System.out.println(nameGenerator() + "," + "0" + "," + airports[airportSelectionOne()]); 
    } 

Вы генерации случайного числа в методе flightSeatingAmount() который также может быть zero, а затем вы пытаетесь инициализировать массив этого размера. Но тогда вам нужно будет проверить, является ли airportSelectionOne(), который также является случайным назначением, находится в пределах размера или нет.

1

Измените следующий код, чтобы иметь правильный размер массива.

int airportOne = (int)(Math.random() * [size of airport array - 1]); 
0
public static void flightManifest() throws FileNotFoundException { 

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

//GOOD INFORMATION!!! 
System.out.println("airportSelectionOne()=" + airportSelectionOne() + ", airports.length=" + airports.length + ""); 

     System.out.println(nameGenerator() + "," + "0" + "," + airports[airportSelectionOne()]); 
    }  
} 

Это System.out.println я добавил в середине выше функции является довольно показательным ...

Смежные вопросы