下面的代码是可视化在程序其余部分中生成的数据的打印输出。它从输入到arraylist的工资和位置中取出信息。
我主要关注的是如何按照正确的顺序组合它们,并让它们以正确的顺序打印出来。
这就是我的问题所在。我收到了
arrayoutofbound exception:19
在我的打印整数数组上。
我添加了setTotalInPrint()
的最终数据。
然后我打印出来自schrijfData()
非常感谢任何帮助。
import java.util.ArrayList;
/**
* Verzameling van alle gegevens voor het weergeven van de remmings bulletin
*
* @author Pieter-Jan Casteels
* @version 2017-05-17
*/
public class Bulletin
{
// Collection of the data
private int[] print;
// Totalen
private int totaalAantal;
private int totaalAfgezonderdeRem;
private int totaalLengteInM;
private int totaalMassa;
private int totaalRemming;
// Percentage
private int percentageRemming;
private int vereisteMassaRemming;
private int vereisteRemmingPercentage;
/**
* Basic constructor
*/
public Bulletin()
{
System.out.println("Kan niet gegenereerd worden zonder Trein classe");
}
/**
* Full constructor voor de Bulletin classe
*
* @param Trein de huidige trein
*/
public Bulletin(Trein newTrein)
{
setPrint();
setTotaalAantal(0);
setAfgezonderdeRem(0);
setTotaalLengteInM(0);
setTotaalMassa(0);
setTotaalRemming(0);
setPercentageRemming(0);
setVereisteMassaRemming(0);
setVereisteRemmingPercentage(50);
berekenLocoEnWagen(newTrein);
remmingsPercentage();
vereisteGeremdeMassa();
setTotaalInPrint();
schrijfData(print);
}
// Setters en Getters
/**
* Roep de classe aan voor het berekenen van de loco en wagen
* Geef hier de arraylist aan mee
*/
private void berekenLocoEnWagen(Trein newTrein)
{
berekeningLocos(newTrein.getLocos());
berekeningWagens(newTrein.getWagens());
}
/**
* Setter voor de array met gegevens die geprint moet worden
*/
private void setPrint()
{
print = new int[19];
}
/**
* De totaal optelling van de lengte van de trein
*
* @param intiger de lengte in meter
*/
private void setTotaalLengteInM(int value)
{
if(value >= 0)
{
totaalLengteInM += value;
}
}
/**
* De totaal optelling van de aantallen
*
* @param intiger de aantallen
*/
private void setTotaalAantal(int value)
{
if(value >= 0)
{
totaalAantal += value;
}
}
/**
* Het totaal afgezonderde remmen
*/
private void setAfgezonderdeRem(int value)
{
if(value >= 0)
{
totaalAfgezonderdeRem += value;
}
}
/**
* De totaal optelling van de massas
*
* @param intiger de massas
*/
private void setTotaalMassa(int value)
{
if(value >= 0)
{
totaalMassa += value;
}
}
/**
* De totaal optelling van de remming
*
* @param intiger de Remming
*/
private void setTotaalRemming(int value)
{
if(value >= 0)
{
totaalRemming += value;
}
}
/**
* De weergave voor het percentage remming
*
* @param intiger de Remming
*/
private void setPercentageRemming(int value)
{
if(value >= 0)
{
percentageRemming += value;
}
}
/**
* De vereiste geremde massa
*/
private void setVereisteMassaRemming(int value)
{
if(value >= 0)
{
vereisteMassaRemming += value;
}
}
/**
* De vereiste percentage voor remming
*/
private void setVereisteRemmingPercentage(int value)
{
if(value >= 0)
{
vereisteRemmingPercentage += value;
}
}
// Methodes
/**
* De verzameling van gegevens voor de locomotief weergave in de bulletin
* Verzamel de gegevens per locomotief en plaats ze in de locale variabelen
* Roep de setters aan voor de optellingen van de totalen
*/
private void berekeningLocos(ArrayList<Loco> locos)
{
if(!locos.isEmpty())
{
// Aantal
int sleepAantal = 0;
int voertuigAantal = 0;
// Lengte
int sleepLengteDM = 0;
int voertuigLengteDM = 0;
int sleepInM = 0;
int voertuigInM = 0;
// Massa
int sleepMassa = 0;
int voertuigMassa = 0;
// Remming
int sleepRemming = 0;
int voertuigRemming = 0;
for(Loco loco : locos)
{
if(!loco.getAlsVoertuig())
{
sleepAantal++;
sleepLengteDM += loco.getLengteDM();
sleepMassa += loco.getTotalMassa();
sleepRemming += loco.getRemming();
}
else
{
voertuigAantal++;
voertuigLengteDM += loco.getLengteDM();
voertuigMassa += loco.getTotalMassa();
voertuigRemming += loco.getRemming();
}
if(loco.getAfgzRem())
{
setAfgezonderdeRem(1);
}
}
setTotaalAantal(locos.size());
sleepInM = afrondenLengteInM(sleepLengteDM);
setTotaalLengteInM(sleepInM);
voertuigInM = afrondenLengteInM(voertuigLengteDM);
setTotaalLengteInM(voertuigInM);
setTotaalMassa(sleepMassa);
setTotaalMassa(voertuigMassa);
setTotaalRemming(sleepRemming);
setTotaalRemming(voertuigRemming);
int[] loc = {0, 1, 5, 6, 9, 10, 13, 14};
int[] data = {sleepAantal, voertuigAantal, sleepInM, voertuigInM, sleepMassa, voertuigMassa, sleepRemming, voertuigRemming};
setDataPrint(loc, data);
}
else
{
System.out.println("Zonder locomotief geen trein");
}
}
/**
* Input the data into the print array at location
*
* @param int array loc, this is the location
* @param int array data, this is the data for the location
*/
private void setDataPrint(int[] loc, int[] data)
{
for(int i = 0; i < loc.length ; i++)
{
print[loc[i]] = data[i];
}
}
/**
* De verzameling van gegevens voor de wagen weergave in de bulletin
* Verzamel de gegevens per wagen en plaats ze in de locale variabelen
* Roep de setters aan voor de optellingen van de totalen
*/
private void berekeningWagens(ArrayList<Wagen> wagens)
{
// Aantal
int wagensAantal = wagens.size();
// Lengte
int voertuigLengteDM = 0;
int voertuigInM = 0;
// Massa
int voertuigMassa = 0;
// Remming
int voertuigRemming = 0;
for(Wagen wagen : wagens)
{
voertuigLengteDM += wagen.getLengteDM();
voertuigRemming += wagen.getRemming();
if(wagen.getAfgzRem())
{
setAfgezonderdeRem(1);
}
}
setTotaalAantal(wagensAantal);
voertuigInM = afrondenLengteInM(voertuigLengteDM);
setTotaalLengteInM(voertuigInM);
setTotaalMassa(voertuigMassa);
setTotaalRemming(voertuigRemming);
int[] loc = {2, 7, 11, 15};
int[] data = {wagensAantal, voertuigInM, voertuigMassa, voertuigRemming};
setDataPrint(loc, data);
}
/**
* Afronden lengtes naar boven lengte naar meters
*/
private int afrondenLengteInM(int totaalDM)
{
return (totaalDM + 9) / 10;
}
/**
* Berekening remmings percentage van de trein
* Afgerond naar beneden.
*/
private void remmingsPercentage()
{
percentageRemming = (totaalRemming * 100) / totaalMassa;
}
/**
* Vereiste Geremde Remming
*/
private void vereisteGeremdeMassa()
{
vereisteMassaRemming = (vereisteRemmingPercentage * totaalMassa) / 100;
}
/**
* Zet al de totaals in de print array
*/
private void setTotaalInPrint()
{
int[] loc = {3, 4, 8, 12, 16, 17, 18, 19};
int[] data = {totaalAantal, totaalAfgezonderdeRem, totaalLengteInM, totaalMassa, totaalRemming, percentageRemming, vereisteMassaRemming, vereisteRemmingPercentage};
setDataPrint(loc, data);
}
/**
* Print de data aan de hand van de print array
*/
private void schrijfData(int[] print)
{
System.out.println("21 AANTAL");
System.out.println("21.1 Sleeplocomotief(ven): " + print[0]);
System.out.println("21.2 Loc als voertuig(en): " + print[1]);
System.out.println("21.3 Andere voertuigen: " + print[2]);
System.out.println("21.4 TOTAAL TREIN: " + print[3]);
System.out.println("21.5 Voertuig met afgezonderde rem: " + print[4]); // 4
// Lengte
System.out.println("22 LENGTE");
System.out.println("22.1 Sleeplocomotief(ven): " + print[5]);
System.out.println("22.2 Loc als voertuig(en): " + print[6]);
System.out.println("22.3 Andere voertuigen: " + print[7]);
System.out.println("22.4 TOTAAL TREIN: " + print[8]); // 8
// Massa
System.out.println("23 MASSA");
System.out.println("23.1 Sleeplocomotief(ven): " + print[9]);
System.out.println("23.2 Loc als voertuig(en): " + print[10]);
System.out.println("23.3 Andere voertuigen: " + print[11]);
System.out.println("23.4 TOTAAL TREIN: " + print[12]); // 12
// Remming
System.out.println("24 WERKELIJKE GEREMDE MASSA");
System.out.println("24.1 Sleeplocomotief(ven): " + print[13]);
System.out.println("24.2 Loc als voertuig(en): " + print[14]);
System.out.println("24.3 Andere voertuigen: " + print[15]);
System.out.println("24.4 TOTAAL GEREMDE MASSA");
System.out.println("24.41 Tonnage: " + print[16]);
System.out.println("24.42 Percentage: " + print[17]); // 17
// Vereiste remming
System.out.println("25 VEREISTE GEREMDE MASSA");
System.out.println("25.1 Tonnage: " + print[18]);
System.out.println("25.2 Percentage: " + print[19]); // 19
}
}
答案 0 :(得分:1)
这就是原因,你要创建一个有19个位置(0-18)的印刷品你不能使用19
private void setPrint()
{
print = new int[19];
}
解决方案:
private void setPrint()
{
print = new int[20];
}