Bawi się ktoś w Advent of Code? --> https://adventofcode.com/
Jako, że dopiero uczę się programowania i jestem leszczem, to wyłożyłem się już na drugim zadaniu dnia pierwszego. Ale od początku.
W pierwszym zadaniu chodzi o to by policzyć ilość paliwa dla modułów statku kosmicznego. Każdy moduł ma masę, na podstawie której liczy się ilość paliwa:
masa paliwa = masa modułu / 3 (zaokąglona w dół ) - 2.
Masy modułów (jest ich kilkadziesiąt) podane są jako wartości całkowitoliczbowe w jednej kolumnie.
Skopiowałem je więc do pliku txt. Użyełm klasy RandomAccessFile i w pętli while zczytałem, policzyłem i zsumowałem ilość paliwa dla całego statku. Poszło gładko, wynik się zgadzał.
W części drugiej zadania należało uwzględnić także masę paliwa, czyli masę paliwa obliczonego za pierwszym razem, potem paliwo dla paliwa z drugiego obliczenia itd. aż wartość wyjdzie rózwna zero lub ujemna. Ilość paliwa dla paliwa obliczamy tak samo jak wcześniej: masa paliwa = masa paliwa bieżącego / 3(zaokąglona w dół ) - 2.
tu już poszło gorzej. Zagnieździałem kolejną pętlę while i kombinowalem na różne sposoby. Niestety wynik nie jest prawidłowy.
Ktoś to rozwiązał lub ma pomysł?
Poniżej mój upośledzony kod:
import java.io.*;
public class Fuel {
public static void main(String[] args) {
if(args.length<1){
System.out.println("Wywołanie programu");
return;
}
File file = new File(args[0]);
if(!file.exists()){
System.out.println("Plik nie istnieje");
return;
}
RandomAccessFile raf = null;
try{
raf = new RandomAccessFile(file, "r");
}catch (FileNotFoundException e){
System.out.println("Nie znalezono pliku" + e);
}
String line = " ";
int moduleMass = 0;
double fuelSum = 0.0;
double finalFuelMass = 0;
double tempFuelMass;
try{
while((line = raf.readLine()) != null){
moduleMass = Integer.parseInt(line);
double initFuelMass = moduleMass/3 - 2;
tempFuelMass = initFuelMass;
while (tempFuelMass > 0){
tempFuelMass = tempFuelMass/3 - 2;
finalFuelMass = finalFuelMass + tempFuelMass;
}
fuelSum = fuelSum + initFuelMass +finalFuelMass;
}
raf.close();
}catch (IOException e){
System.out.println("Błąd wejścia/wyjścia");
}
System.out.println("Paliwo dla modułów: " + (int)fuelSum);
}
}
tempFuelMass == 5
,tempFuelMass > 0
, ale w środku tego obrotu pętli dodajesz do sumy-1
.