Hola lcanciani.
El primer problema que tienes son los paréntesis al crear el numero aleatorio tu lo tienes asi:
if(npensando==(x=(int)rnd.nextDouble()*nfinal+ninicial))
Te faltan los parentesis para crear el numero entero de toda la sentencia (rnd.nextDouble()*n+n).
if(npensando==(x= (int)
( (rnd.nextDouble()*nfinal+ninicial)
) ))
De la forma que tu lo tienes se evalúa según la prioridad de los operadores y por eso siempre sale el mismo numero.
Poniendo los paréntesis se convierte a entero después de hacer los cálculos de multiplicación y suma. Lo puedes comprobar poniendo este bucle for después de introducir la horquilla de números ninicial, nfinal y nintentos.
for(int i=1; i<=10;i++){
System.out.print("Sin parentesis "+(int)rnd.nextDouble()*nfinal+ninicial+" ");
System.out.print("Con parentesis "+(int)(rnd.nextDouble()*nfinal+ninicial)+"\n");
}
Me remito a el tema :
https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=240:generacion-de-numeros-aleatorios-en-java-rangos-clase-random-ejemplos-ejercicios-resueltos-cu00906c&catid=58&Itemid=180En el apartado nº 3.
3. Llamar a una de las funciones miembro que generan un número aleatorio:
Debajo del código de ejemplo se comenta esto:
En el caso de necesitar números aleatorios enteros en un rango determinado, podemos trasladarnos a un intervalo distinto, simplemente multiplicando, aplicando la siguiente fórmula general:
(int) (rnd.nextDouble() * cantidad_números_rango + término_inicial_rango)
.
Si te fijas la sentencia rnd va envuelta entre parentesis.
Otro problema es cual seria la forma correcta de hacer que al ingresar por teclado un caracter se convierta a mayusculas.
Para la segunda duda la solucion podria se esta:
System.out.println("Quieres probar otra vez? (S/N)");
c=Character.toUpperCase (en.next().charAt(0));
Espero que te sirva.
Un saludo.

P.D.
Tenemos que intentar a la hora de poner en los foros las soluciones de los ejercicios nombrar en el
Asunto : de que ejercicio se trata.
Poner algo como esto :
Java Avanzado Ejercicio CU00919C Interface Iterator api java hasNext remove
Así cuando los miramos sabemos a que ejercicio en concreto se refiere
