Go to diff to previous submission
import java.io.BufferedReader; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author cteam021 */ public class Ants { private Klada klada; try { new Ants(); e.printStackTrace(); } } klada = new Klada(lengthKlada); for (int i = 0; i < numAnts; i++) { line = reader.readLine(); if (or.equals("R")) { klada.addAnt(new Ant(pos, true)); } else { klada.addAnt(new Ant(pos, false)); } } klada.sort(); // System.out.println("DOME CALLED"); doMe(); } public void doMe() { boolean printed = false; while (klada.getLength() > 1) { //find first collision int minIndex = -1; double minDiff = -1; // System.out.println("BEFORE CYCLE"); for (int i = 0; i < klada.getLength() - 1; i++) { // System.out.println(" KLADA LENGTH: " + klada.getLength()); Ant a1 = klada.get(i); Ant a2 = klada.get(i + 1); // System.out.println(" after init KLADA LENGTH: " + klada.getLength()); if (collide(a1, a2)) { // System.out.println("diff je :" + diff); if ((minDiff == -1 || diff < minDiff) && diff > 0) { minDiff = diff; minIndex = i; } } } double maxDistanceLeft = -1; double maxDistanceRight = -1; Ant corrAntLeft = null; Ant corrAntRight = null; // System.out.println("MIN DIFF JE : " + minDiff); if (minDiff == -1) { // System.out.println("MIN DIFF JE -1"); for (Ant a : klada.getAnts()) { if (a.isIsRight()) { double maxLocal = (klada.getInitLength() - a.getPosition()); if (maxDistanceRight == -1 || maxLocal > maxDistanceRight) { corrAntRight = a; maxDistanceRight = maxLocal; } } else { double maxLocal = a.getPosition(); if (maxDistanceLeft == -1 || maxLocal > maxDistanceLeft) { corrAntLeft = a; maxDistanceLeft = maxLocal; } } } if (maxDistanceLeft > maxDistanceRight) { suffix + corrAntLeft.getStartingPosition() + "."); } else if (maxDistanceLeft < maxDistanceRight) { corrAntRight.getStartingPosition() + "."); } else { int max = corrAntRight.getStartingPosition(); int min = corrAntLeft.getStartingPosition(); if (min > max) { int temp = min; min = max; max = temp; } suffix + min + " and " + max + "."); } printed = true; break; } double collideIn = minDiff / 2.0; //shift all ants klada.shiftAnts(collideIn); //turn all colliding ants klada.turnColliding(); klada.removeFallen(); } Ant a = klada.get(0); double maxLocal; if (a.isIsRight()) { maxLocal = (klada.getInitLength() - a.getPosition()); } else { maxLocal = a.getPosition(); } if (!printed) { suffix + a.getStartingPosition() + "."); } } public boolean collide(Ant a1, Ant a2) { if (a1.isIsRight() && !a2.isIsRight()) { return true; } return false; } } class Klada { private double seconds = 0; private List<Ant> ants = new ArrayList<Ant>(); return length; } this.length = length; } public void turnColliding() { for (int i = 0; i < ants.size() - 1; i++) { Ant a1 = ants.get(i); Ant a2 = ants.get(i + 1); if (a1.getPosition() == a2.getPosition()) { a1.setIsRight(!a1.isIsRight()); a2.setIsRight(!a2.isIsRight()); } } } public void sort() { for (int i = 0; i < ants.size() - 1; i++) { for (int j = 0; j < ants.size() - 1 - i; j++) { if (ants.get(j).getPosition() > ants.get(j + 1).getPosition()) { Ant a = ants.get(j); ants.set(j, ants.get(j + 1)); ants.set(j + 1, a); } } } } public void removeFallen() { List<Ant> newAnts = new ArrayList<Ant>(); for (Ant a : ants) { if (a.getPosition() >= 0 && a.getPosition() <= length) { newAnts.add(a); } } ants = newAnts; } public void shiftAnts(double timeShiftFor) { seconds += timeShiftFor; for (Ant a : ants) { if (a.isIsRight()) { //shift right a.setPosition(a.getPosition() + timeShiftFor); } else { a.setPosition(a.getPosition() - timeShiftFor); } } } public void addAnt(Ant ant) { ants.add(ant); } public List<Ant> getAnts() { return ants; } public Ant get(int i) { return ants.get(i); } public void setAnts(List<Ant> ants) { this.ants = ants; } return ants.size(); } this.length = length; } public double getSeconds() { return seconds; } public void setSeconds(double seconds) { this.seconds = seconds; } } class Ant { private double position; //true= right; left= false private boolean isRight; this.position = position; this.isRight = isRight; this.startingPosition = position; } return startingPosition; } this.startingPosition = startingPosition; } public boolean isIsRight() { return isRight; } public void setIsRight(boolean isRight) { this.isRight = isRight; } public double getPosition() { return position; } public void setPosition(double position) { this.position = position; } }
--- c4.s1280.cteam021.ants.java.0.Ants.java +++ c4.s1326.cteam021.ants.java.0.Ants.java @@ -123,7 +123,14 @@ corrAntRight.getStartingPosition() + "."); } else { + int max = corrAntRight.getStartingPosition(); + int min = corrAntLeft.getStartingPosition(); + if (min > max) { + int temp = min; + min = max; + max = temp; + } System.out.println(prefix + (int) (klada.getSeconds() + maxDistanceRight) + suffix + - corrAntLeft.getStartingPosition() + " and " + corrAntRight.getStartingPosition() + "."); + min + " and " + max + "."); } printed = true;