te l'ho snellito ulteriormente:
codice:
public class PIApprox {

    // Scegli la precisione
    static double approx = 10E-4;

    public static void main (String[] args) {
        double previous = 0;
        double current = 0;        
        int i = 0;
        
        do {
            previous = current;
            current = previous + (4d/(2*i+1))*(i % 2 == 0 ? 1 : -1);
            i++;
        }
        while (Math.abs(previous-current) / 2 > approx);        
        System.out.println("Iterazioni: "+i+"\tValore: "+(current+previous)/2);
    }
}
il ciclo si ripete finché la semi-differenza tra due successivi valori della serie è minore della precisione richiesta (il chè non è proprio la specifica del tuo esercizio)

Quello che avviene nel ciclo stesso è:
- assegno alla variabile che rappresenta il valore "precedente" (previous) nella serie il valore corrente (current) della serie stessa
- calcolo il valore corrente: la roba nella seconda parentesi vuol semplicemente dire che se il resto della divisione i / 2 è 0 (ovvero i è pari) allora il segno sarà positivo, altrimenti negativo. Ed è semplicemente la traduzione della successione di segni nella serie che definisce pigreco. La prima parentesi invece calcola i vari valori (4, 4/3, 4/5, 4/7 ....)
- aumento il contatore delle iterazioni.