2017-02-06 17 views
0

В настоящее время я работаю над проектом, в котором я читал в CSV-файле, который содержит список Pokemon, а также их черты. Я пытаюсь запустить боевой симулятор, который случайным образом соединяет эти Pokemon друг с другом и сравнивает их battleScore, который является результатом простого вычисления, используя их черты, такие как скорость, атака, защита и т. Д. Я читал во всех Pokemon из файла CSV в ArrayList типа Pokemon. Теперь я хочу случайным образом связать их друг с другом и сравнить их боевые качества; тот, кто имеет более высокий балл, переходит к следующему раунду, а проигравший помещается в другой ArrayList побежденного Покемона. Тем не менее, я не знаю, как случайно соединить Pokemon. Вот мой код основного класса до сих пор:Как сочетать случайные индексы ArrayList друг с другом

import java.io.*; 
import java.util.ArrayList; 
import java.util.Random; 

public class assign1 { 

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

    String csvFile = args[0]; //path to CSV file 
    String writeFile = args[1]; //name of output file that contains list of Pokemon and their traits 
    BufferedReader br = null; 
    String line = ""; 
    String cvsSplitBy = ","; 

    ArrayList<Pokemon> population = new ArrayList<Pokemon>(); 

    FileWriter fileWriter = new FileWriter(writeFile); 

    BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); 

    try { 

     br = new BufferedReader(new FileReader(csvFile)); 
     String headerLine = br.readLine(); // used to read first line of CSV file that contains headers 
     while ((line = br.readLine()) != null) { 

      Pokemon creature = new Pokemon(); 
      // use comma as separator 
      String[] pokemon = line.split(cvsSplitBy); 

      creature.setId(pokemon[0]); 
      creature.setName(pokemon[1]); 
      creature.setType1(pokemon[2]); 
      creature.setType2(pokemon[3]); 
      creature.setTotal(pokemon[4]); 
      creature.setHp(Integer.parseInt(pokemon[5])); 
      creature.setAttack(Integer.parseInt(pokemon[6])); 
      creature.setDefense(Integer.parseInt(pokemon[7])); 
      creature.setSpAtk(Integer.parseInt(pokemon[8])); 
      creature.setSpDef(Integer.parseInt(pokemon[9])); 
      creature.setSpeed(Integer.parseInt(pokemon[10])); 
      creature.setGeneration(Integer.parseInt(pokemon[11])); 
      creature.setLegendary(Boolean.parseBoolean(pokemon[12])); 
      creature.getCombatScore(); 

      // Adds individual Pokemon to the population ArrayList 
      population.add(creature); 

      // Writes to pokemon.txt the list of creatures 
      bufferedWriter.write(creature.getId() + ". " 
        + "Name: " + creature.getName() + ": " 
        + "Type 1: " + creature.getType1() + ", " 
        + "Type 2: " + creature.getType2() + ", " 
        + "Total: " + creature.getTotal() + ", " 
        + "HP: " + creature.getHp() + ", " 
        + "Attack: " + creature.getAttack() + ", " 
        + "Defense: " + creature.getDefense() + ", " 
        + "Special Attack: " + creature.getSpAtk() + ", " 
        + "Special Defense: " + creature.getSpDef() + ", " 
        + "Speed: " + creature.getSpeed() + ", " 
        + "Generation: " + creature.getGeneration() + ", " 
        + "Legendary? " + creature.isLegendary() + ", " 
        + "Score: " + creature.getCombatScore()); 
      bufferedWriter.newLine(); 

     } 

    } 
    catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
    finally { 
     if (br != null) { 
      try { 
       br.close(); 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    bufferedWriter.close(); 

} 
} 

А вот код для моего класса Pokemon:

public class Pokemon { 
String id; 
String name; 
String type1; 
String type2; 
String total; 
int hp; 
int attack; 
int defense; 
int spAtk; 
int spDef; 
int speed; 
int generation; 
boolean legendary; 


public Pokemon() {} 

public String getId() { 
     return id; 
    } 

public void setId(String id) { 
    this.id = id; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getType1() { 
    return type1; 
} 

public void setType1(String type1) { 
    this.type1 = type1; 
} 

public String getType2() { 
    return type2; 
} 

public void setType2(String type2) { 
    this.type2 = type2; 
} 

public String getTotal() { 
    return total; 
} 

public void setTotal(String total) { 
    this.total = total; 
} 

public int getHp() { 
    return hp; 
} 

public void setHp(int hp) { 
    this.hp = hp; 
} 

public int getAttack() { 
    return attack; 
} 

public void setAttack(int attack) { 
    this.attack = attack; 
} 

public int getDefense() { 
    return defense; 
} 

public void setDefense(int defense) { 
    this.defense = defense; 
} 

public int getSpAtk() { 
    return spAtk; 
} 

public void setSpAtk(int spAtk) { 
    this.spAtk = spAtk; 
} 

public int getSpDef() { 
    return spDef; 
} 

public void setSpDef(int spDef) { 
    this.spDef = spDef; 
} 

public int getSpeed() { 
    return speed; 
} 

public void setSpeed(int speed) { 
    this.speed = speed; 
} 

public int getGeneration() { 
    return generation; 
} 

public void setGeneration(int generation) { 
    this.generation = generation; 
} 

public boolean isLegendary() { 
    return legendary; 
} 

public void setLegendary(boolean legendary) { 
    this.legendary = legendary; 
} 

public int getCombatScore() { 
    return (speed/2) * (attack + (spAtk/2)) + (defense + (spDef/2)); 
} 

@Override 
public String toString() { 
    return "Name: " + this.getName() 
      + ", Type 1: " + this.getType1() 
      + ", Type 2: " + this.getType2() 
      + ", Total: " + this.getTotal() 
      + ", HP: " + this.getHp() 
      + ", Attack: " + this.getAttack() 
      + ", Defense: " + this.getDefense() 
      + ", Sp. Attack: " + this.getSpAtk() 
      + ", Sp. Defense: " + this.getSpDef() 
      + ", Generation: " + this.getGeneration() 
      + ", Legnedary: " + this.isLegendary() 
      + ", Score: " + this.getCombatScore(); 
} 
} 

Я только хочу, чтобы сравнить их значения combatScore друг к другу. Любая помощь/предложения будут высоко оценены.

ответ

1

Поскольку каждый элемент в ArrayList имеет индекс, вы можете просто получить случайный элемент из этого, вызывая

Pokemon pokemon1; 
Pokemon pokemon2; 
pokemon1 = arrayList.get(Math.random()*arrayList.size()); 
do { 
    pokemon2 = arrayList.get(Math.random()*arrayList.size()); 
} while(pokemon1.getId() == pokemon2.getId()); 

затем сравнить покемон вы получили из List1 с одним вы получили от List2.

После этого вы, конечно, можете удалить Pokémon из списка, если хотите.

Надеюсь, что это поможет!

+0

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

+0

Добро пожаловать! – matejetz

0

Что мне кажется. Вы выбираете один случайный элемент (покемон) из списка массивов. Удалите его из списка массивов. Затем вы снова выбираете один случайный предмет и удаляете его. Теперь у вас есть пара предметов. Повторите шаг выше для оставшихся элементов в списке массивов, пока не появится больше предметов.

Или вы можете перетасовать весь список массива, а затем выбрать пункт я и п я + 1 в качестве пары для я = 0,2,4,6, ...

Collections.shuffle(pokemonsArrayList); 
for (int i=0; i< pokemonsArrayList.size(); i+=2) { 
    pokemon1 = pokemonsArrayList.get(i); 
    pokemon2 = pokemonsArrayList.get(i+1); 
} 

Просто убедитесь, что номер элементов в ArrayList. В противном случае код выше будет вызывать индекс исключения из привязанного