Buffon's Needle experiment
In this loop…


    for(int i = 0; i&lt;trials; i++) {
        xVal(darts);
        yVal(darts);
        hits(darts);
        System.out.println(piCalc(darts));
    }



You are throwing away the values returned from xVal(darts), yVal(darts), and hits(darts), making these calls completely superfluous.  All they are doing is wasting entropy from the random number generator.  The only thing that matters is piCalc(darts) (which calls hits(), which in turn calls xVal() and yVal()).

The code for xVal() is exactly identical to yVal().  You don't need to write the same function twice.