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
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:
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:
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:
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);
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);
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