Como realizar uma ação somente se o if for falso?

Sou novato em Java (auto didata) e queria executar uma ação do if somente se a condição dele for falsa, como devo fazer isso?
Meu código:
import java.util.Scanner;

public class Numeros{

public static void main(String[] args) {
    
    Scanner sc=new Scanner(System.in);
    double num1;
    System.out.println("Insira um numero maior que 10 e menor que 25");

    num1 = sc.nextDouble();

    if(num1 > 10 && num1 < 25){
       
   
        

    } else { System.out.println("Insira um numero maior que 10 e menor que 25");
        num1 = sc.nextDouble();

}

queria repetir esse print e a entrada do sc.nextDouble(); caso o if nao seja verdadeiro

Olá se eu entendi a sua pergunta… Dê uma olhada em um método boolean, pois o método boolean tem um retorno true (verdadeiro) ou false (falso);

Usa o operador NOT: !

if ( ! condição ) {
    // Faz algo
}

Só fazendo um adendo à resposta do @staroski.
O uso do operador NOT (!) requer um certo cuidado quanto ao uso, já que ele inverte o valor booleano e não necessariamente verifica se uma opção é falsa. Por exemplo, suponhamos a seguinte situação:

private boolean contaContabilValida(String idContaInformada){
	boolean contaCadastrada = true;
	carregarDados();
	
	for(bean.ContaContabil conta : contas){
		contaCadastrada = conta.getIdentificador().equals(idContaInformada);
	}
	return contaCadastrada;
}

Nesse caso, contaCadastrada pode retornar true ou false. Se eu simplesmente negar o resultado, um método que consuma isso pode ter um funcionamento indesejado:

private void testar(){
	if(!contaContabilValida(txtIdConta.getText())){
		<código>
	}
}

Nesse exemplo, se quero que o código seja executado quando a contaCadastrada não estiver registrada, ou seja, quando for false, então terei um problema, pois como estou negando a expressão, o código será executado quando contaCadastrada for true. Por isso, para evitar esse tipo de problema, sugiro eu, quando não se queira essa ‘inversão’ no valor lógico, que se utilize explicitamente a comparação x == false, como no exemplo:

private void testar(){
	if(contaContabilValida(txtIdConta.getText()) == false){
		<código>
	}
}

Dessa forma, pode-se evitar erros sutis.

Você está enganado colega.
O if somente executa seu corpo quando a expressão avaliada resulta em true.
Se o método contaContabilValida retornar true, a negação dele será false, portanto não entrará no if.

Se o método contaContabilValida retornar false, a negação dele será true, então entrará no if.

Resumindo:

A expressão:

if ( contaContabilValida(txtIdConta.getText()) ) {
    // faz algo quando true
}

É exatamente igual à fazer:

if ( contaContabilValida(txtIdConta.getText()) == true ) {
    // faz algo quando true
}

E a expressão:

if ( ! contaContabilValida(txtIdConta.getText()) ) {
    // faz algo quando false
}

É exatamente igual à fazer:

if ( contaContabilValida(txtIdConta.getText()) == false ) {
    // faz algo quando false
}

É uma má prática utilizar o == true ou == false afinal, a própria expressão booleana vai retornar true ou false.

o que você quer é criar uma estrutura de repetição, né?
No seu caso

`double num1;`
`System.out.println("Insira um numero maior que 10 e menor que 25");`
num1 = sc.nextDouble();

while(num1 <= 10 && num1 >= 25){
System.out.println("Insira um numero maior que 10 e menor que 25");
    num1 = sc.nextDouble();
}
System.out.println("O número escolhido foi "+num1);

Tua lógica está errada e nunca irá funcionar.

while(num1 <= 10 && num1 >= 25)

Não existe um número que, ao mesmo tempo, seja menor ou igual a 10 e maior ou igual a 25. Funcionaria, sim, se você trocasse o operador lógico && por ||.

E, apenas para demonstrar, segue um outro jeito de fazer. Funcional e sem repetir códigos.

double num1;
do {
    System.out.println("Insira um número maior que 10 e menor que 25");
    num1 = Double.parseDoublle(sc.nextLine());
} while (num1 <= 10 || num1 >= 25);

System.out.println("O número escolhido foi: " + num1);
2 curtidas

verdade, problemas de atenção, misturei a lógica do dono da pergunta que implementava o intervalo e acabei me enganando, a opção seria a negação do intervalo que o dono da pergunta tinha feito

while( !(num1 > 10 && num1 < 25) ){
 }