Я работаю над окончательным проектом, и вот информация о проекте и ошибках, которые я получаю:
Мы должны смоделировать форму жизни по имени compAlien и посмотреть, как они реагируют друг на друга. Эти инопланетяне создаются с помощью генетического кода длиной 128 символов, состоящего только из букв X, Y или Z.
Согласно паре правил, мы должны вычислить и найти такую информацию об этих инопланетянах (например, если в генетическом коде есть 20 X, цвет глаз становится голубым и т. д.), создать строку, содержащую эту информацию, и его в ArrayList. Мне удалось создать код (приведенный ниже), но в большинстве случаев, когда я пытаюсь создать несколько инопланетян, я всегда получаю сообщение об ошибке:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: 128 at
java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48) at
java.base/java.lang.String.charAt(String.java:709) at
compAlien.calculateHealth(compAlien.java:75) at
compAlien.generateCompAlienInfos(compAlien.java:34) at
compAlien.main(compAlien.java:193)
Вот код, который я смог написать:
import java.util.Scanner;
import java.util.ArrayList;
public class compAlien {
static Scanner input = new Scanner(System.in);
static ArrayList<String> compAlienInfos = new ArrayList<String>();
static String geneticCode = "";
static String compAlienInfo = "";
static int colonySize = 0;
static int count = 0;
public static void generateGeneticCode() { //Method for creating the genetic codes of the compAliens.
for(int i = 0; i < 128; i++) {
char geneticCodeChar = (char) ('X' + Math.random() * ('Z' - 'X' + 1));
geneticCode += geneticCodeChar;
}
}
public static void generateCompAlienInfos() { //Method for creating all the info of the compAliens, assigning them an ID and adding their info to the compAlienInfos ArrayList.
while(count < colonySize) {
geneticCode = "";
compAlienInfo = "";
compAlienInfo += "ID:" + (count + 1) + ", ";
generateGeneticCode();
findGender();
calculateHealth();
findSkinTone();
findEyeColor();
compAlienInfos.add(compAlienInfo);
System.out.println(compAlienInfo);
count ++;
}
}
public static void findGender() { //Method for finding the gender of the compAliens.
if(geneticCode.charAt(127) == 'X') {
compAlienInfo += "Gender: Female, ";
}
else if(geneticCode.charAt(127) == 'Y') {
compAlienInfo += "Gender: Male, ";
}
else {
compAlienInfo += "Gender: Female, ";
}
}
public static void calculateHealth() { //Method for calculating the health of the compAliens.
int health = 1;
int i = 0;
while(i < 127) {
if(geneticCode.charAt(i) == 'Y' && geneticCode.charAt(i + 1) == 'X' && geneticCode.charAt(i + 2) == 'Z') {
health ++;
}
i++;
}
compAlienInfo += "Health: " + health + ", ";
}
public static void findEyeColor() { //Method for finding the eye color of the compAliens.
int xCount = 0;
for(int i = 0; i < 128; i++) {
if(geneticCode.charAt(i) == 'X') {
xCount ++;
}
}
if(xCount <= 10) {
compAlienInfo += "Eye Color: Green";
}
else if (10 < xCount && xCount <= 25) {
compAlienInfo += "Eye Color: Blue";
}
else {
compAlienInfo += "Eye Color: Brown";
}
}
public static void findSkinTone() { //Method for finding the skin tone of the compAliens.
int yCount = 0;
for(int i = 0; i < 128; i++) {
if(geneticCode.charAt(i) == 'Y') {
yCount ++;
}
}
if(20 <= yCount && yCount < 30) {
compAlienInfo += "Skin Tone: Red ";
}
else if (30 <= yCount && yCount <= 40) {
compAlienInfo += "Skin Tone: Green, ";
}
else {
compAlienInfo += "Skin Tone: Orange, ";
}
}
public static void main(String[] args) {
System.out.println("Enter the population size of the compAlien colony: ");
colonySize = input.nextInt();
System.out.println("Simulating the compAlien colony...");
generateCompAlienInfos();
}
}
if (i < geneticCode.length())
, чтобы всегда гарантировать, что i меньше длины строки. 13.01.2021