2016-07-30 2 views
-1
import java.util.Scanner; 
public class ex11 
{ 
static Scanner type=new Scanner(System.in); 
    public static void main(String args[]) 
    { 
     int fact=1; 
     System.out.println("Enter a natural number "); 
     int num=type.nextInt(); 

     int i=1; 
     while(i<=num) 
     { 
      fact*=i; 
      i++;  
     } 
     System.out.println("Factorial of number " + num + " is " + fact); 
    } 
} 

Я пытаюсь разместить условное утверждение внутри цикла while. Условие для проверки будет то, что, если Num является отрицательным числом, S.O.P.("You entered a negative #"); другими словами,Как я могу ввести оператор if внутри цикла while?

if(num<0) 
    S.O.P.("You entered a negative #"); 

Однако это не печатает его должным образом.

+0

Пробовали ли вы на самом деле положить Условный оператор в то время цикл? –

+1

Во-первых, вы установили i = 1, и вы установили условие во время цикла как i <= num. Когда вы введете отрицательное число, это не войдет в цикл while и, следовательно, не будет выполнять то, что находится внутри цикла while. – sarvajeetsuman

ответ

0

Если вы проверяете внутри цикла, то он не будет работать, он все равно будет умножать fact. Вы должны убедиться, что num не является отрицательным, прежде чем вы начнете цикл while.

int num = 0; 
do { 
    if (num<0){ 
     System.out.println("You printed out a negative number"); 
    } 
    System.out.println("Enter a natural number "); 
    int num=type.nextInt(); 
} while (num<0); 

Также на боковой ноте вы должны, вероятно, закрыть свои сканеры, когда вы закончите использовать их.

0

Чтобы ответить на ваш вопрос .... как это:

int i = 1;  // HERE 
while (i <= num) { 
    if (num < 0) { 
     System.out.println("You entered a negative #"); 
    } 
    fact *= i; 
    i++;  
} 

Однако это не будет работать.

Предположим, что число «num», которое вы читаете, меньше нуля.

  • В заявлении с надписью «ЗДЕСЬ» мы устанавливаем «i» в единицу.
  • В следующем утверждении мы тестируем «i < num».
  • Поскольку «num» меньше нуля, этот тест дает «false», и мы пропускаем весь цикл!

Это означает, что ваш условный оператор в теле цикла не будет выполнен ... если «num» меньше нуля.

Поскольку это, очевидно, домашнее задание, я оставлю его вам, чтобы выяснить, что вы должны делать должно быть. Но (HINT!) Он не помещает условие в цикл.

(Пожалуйста, обратите внимание:... Я исправил ряд ошибок типа в коде сравнения исходной версии с моим Это, как вы должны написать Java-код)

+0

Я бы не сказал домашнее задание с конца июля: P – Ryan

+0

@ Ryan - Когда-либо слышал о Южном полушарии? Вы когда-нибудь слышали о летних школах? Moocs? Кроме того, независимо от того, строго ли это домашнее задание или нет, дело не в этом. Это упражнение по изучению, и ОП узнает гораздо больше, решив проблему для себя. –

+0

Хорошо сказал XD. 1 балл Stephen C – Ryan

0

вопрос трудно понять, но от того, что я прочитал в этом случае вы хотите петлю работать, пока значение не будет введено, что соответствует вашему предварительному условию быть положительными

System.out.println("Enter a non negative number :: "); 
int num = type.nextInt(); 
while(num < 0){ 
    System.out.println("The number you entered was negative!"); 
    System.out.println("Enter a non negative number :: "); 
    num = type.nextInt(); 
} 

Loops, как это имеете решающее значение для убедившись, что данные, которые вы используете в пределах предварительное условие вашей операции, которое могло бы вызвать DivideByZero erro rs или другие проблемы. Этот цикл должен быть размещен до того, как вы когда-либо используете значение num, чтобы вы могли убедиться, что он находится в контексте вашей программы.

0

Проблема заключается в том, что если num отрицательный, он не будет идти внутри while loop что происходит потому, что до того, как while loop вы должны инициализировать i=1, так как любое отрицательное число меньше, чем 1 условие while loop станет ложным. Если вы хотите, чтобы проверить, является ли num отрицательный Вставьте if condition перед while loop следующим

import java.util.Scanner; 
    public class ex11 
    { 
    static Scanner type=new Scanner(System.in); 
    public static void main(String args[]) 
    { 
     int fact=1; 
     System.out.println("Enter a natural number "); 
     int num=type.nextInt(); 

     int i=1; 

     if(num < 0) { 
      System.out.println("You entered a negative #"); 
      } 
     else{ 

       while(i<=num) 
       { 
       fact*=i; 
       i++;  
       } 
     System.out.println("Factorial of number " + num + " is " + fact); 
     } 
    } 

} 
0

Вы в основном должны проверить, меньше ли это число. Это нужно делать, принимая входные данные. Вы можете просто взять вход внутри время цикла таким образом:

System.out.println("Enter a natural #"); 
while(true){ //loop runs until broken 
    num = type.nextInt(); 
    if(num>=0) 
     break; 
    System.out.println("Wrong input. Please enter a positive number"); 
} 

может разбиться управление программой из цикла, если num>=0, то есть, положительный, иначе, он переходит к следующей части петли и отображает сообщение об ошибке и снова принимает вход.

Пожалуйста, обратите внимание, что натуральные числа являются теми> = 1. В вашей программе, вы на самом деле пытаетесь ввести целое число, которое> = 0.

Смежные вопросы