2016-12-24 4 views
-5
package cert216; 

class example216 
{ 
    public static void main(String args[]){ 

    int arr[]={1,2,3}; 

    for(int var : arr) 
    { 
     int i = 1; 

     while(i<=var) 
     { 
      System.out.println(i++); 
      //System.out.println(i+"inside while"); 
     } 
     //System.out.println(i+"outside while"); 
    } 
} 

Может кто-то выяснить, почему выход выходит бытьМожет кто-нибудь прояснить приведенный ниже код Java?

1 
2 
1 
2 
3 

, что это значение, которое переменный принимает в то время как итерация?, Он начинается с 0, который является начальным положением обр или он начинается от 1, которое является значением arr.

+0

Пожалуйста, отредактируйте свой заголовок, чтобы уточнить вопрос о вашем Вопросе. –

+4

Ну, * это * не выход из * этот * код. См. [IDEONE] (https://ideone.com/i9pMwZ), в котором вывод будет «1 1 2 1 2 3». Итак, повторите попытку. – Andreas

+0

Моя идея показывает, что выведенный выше результат проверен onec снова – Anshuman

ответ

0

Просто объявите переменную 'var' из цикла for, и вы получите желаемый результат. Вы получаете этот неожиданный результат, потому что каждый раз, когда var получал элемент из массива, он получал инициализацию до 1. . Переменная var для каждой итерации принимает элементы из массива, то есть во время iteartion-1 она принимает 1, то 2 и так далее, Начальное местоположение массива равно 0, а значение в этом месте равно 1, поэтому var будет содержать 1 во время первой итерации. Оба они одинаковы.

+0

Спасибо, Маниш :) – Anshuman

+0

У меня есть нисходящая нить без причины[email protected] вы можете выдвинуть его, если вы удовлетворены моим ответом! –

0

Анализ ниже,

ИТЭР 1:.

for(int var : arr) //var =1, 
{ 
    int i=1; 
    while(i<=var) //1<=1 
    { 
    System.out.println(i++); //prints 1 
    } 
} 

ИТЭР 2:

for(int var : arr) //var =2, 
{ 
    int i=1; 
    while(i<=var) //1<=2, 2<=2 
    { 
    System.out.println(i++); //prints 1 and 2 
    } 
} 

iter3:

for(int var : arr) //var =3, 
{ 
    int i=1; 
    while(i<=var) //1<=3, 2<=3, 3<=3 
    { 
    System.out.println(i++); //prints 1, 2 and 3 
    } 
} 
+0

Спасибо Кирану за такое приятное разъяснение :) – Anshuman

+0

Не проблема, но я получил голос, не знаю почему! –

+0

Можете ли вы проголосовать хотя бы? –

0

Для всех результата вы указали неверно точный результат: 1 1 2 1 2 3 при запуске первого внешнего цикла значение i = 1 и var = 1, и условие (i < = var) удовлетворяет ему, войдет во внутренний цикл и распечатает 1, затем я получу приращение теперь i = 2 теперь условие (2 < = 1) для входа во внутренний цикл ложно, поэтому внутренний цикл не будет выполнен

при запуске второго внешнего контура значение i = 1 и var = 2 и условие (i < = var) удовлетворяет условию, что он войдет во внутренний цикл и распечатает 1, тогда i теперь будет увеличиваться теперь i = 2, теперь условие (2 < = 2) для ввода внутреннего цикла истинно и 2 печатается, i теперь увеличивается i = 3 условие (3 < = 2) для ввода внутреннего контура ложно. поэтому внутренний цикл не будет выполнен.

При запуске третьего внешнего контура значение i = 1 и var = 3, и условие (i < = var) удовлетворяет условию, что оно войдет во внутренний цикл и распечатает 1, после чего i теперь будет увеличено i = 2, теперь условие (2 < = 3), чтобы ввести внутренний цикл, является истинным, а 2 печатается, i теперь увеличивается на i = 3, условие (3 < = 3), чтобы ввести внутренний цикл, истинно и 3 напечатано, i теперь увеличивается на i = 4 условие (= 3) для ввода внутреннего контура ложно. поэтому внутренний цикл не будет выполнен. , и результат будет 1 1 2 1 2 3

i ++ означает использование, затем изменить, чтобы оно напечатало значение i и оно увеличилось.

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