2014-11-19 3 views
1

Я пытаюсь хранить нечетные числа в массиве, но когда я запускаю код, я получаю 9, пять раз в качестве ответа. Он сохраняет только значение 9.Простая программа массива Java

Вот коды:

public class Number2 { 
    public static void main(String[] args) { 
     int[] element = new int[5]; 

     for(int i=0; i<5; i++) { 
      for(int j=1; j <= 10; j=j+2) { 
       element[i] = j; 
      } 
     } 

     for(int i=0; i < 5; i++) { 
      System.out.println(element[i]); 
     } 
    } 
} 

Можете ли вы сказать мне, что случилось с моей программой?

ответ

7

Вы используете две петли, где вам понадобится только один. В настоящее время для каждого элемента вашего массива вы устанавливаете его в 1, затем на 3, затем на 5, затем на 7, затем на 9, каждый раз перезаписывая прежнее значение. Таким образом, в конце ваш массив равен {9,9,9,9,9}. Вероятно, вы хотели бы это сделать:

for(int i = 0; i < element.length; i++) { 
    element[i] = i*2 + 1; 
} 
+1

[user1506916 упоминает в попытке редактировать] (http://stackoverflow.com/review/suggested-edits/6270341): «Это лучше использовать встроенный в' .length' собственности (' element.length'), а не указание значения. Это предотвращает случайные исключения IndexOutOfBounds. – admdrew

+0

Вы абсолютно правы, спасибо за редактирование – LionC

1

Вы меняете все элементы в своем массиве на последнее значение j.

Ваша петля должна быть:

for (int i=0;i<5;i++) 
    { 
     elements[i]=2*i +1; 
    } 

Подумайте об этом так:

Когда я это 0, то вы присваиваете элементов [0] значения от 1 до 9 (в J петли). Последнее присвоенное значение 9.

2

Внутренний цикл (с переменной j) работает от 1 до 9 для каждой итерации внешнего цикла индекса, и всегда присваивает значение element[i], следовательно, каждое значение element массива будет 9 ,

Следуя вашей логике это то, как это должно быть:

for (int i = 0, j = 1; i < 5; i++, j += 2) 
    element[i] = j; 

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

Несколько улучшений:

Поскольку element является массив не только элемент, вы должны назвать это множественное число, как elements.Также не повторять длину массива в нескольких местах в вашем коде, массив знает его длина: elements.length, использовать это в for заявлении:

int[] elements = new int[5]; 

for (int i = 0, j = 1; i < elements.length; i++, j += 2) 
    elements[i] = j; 

Кроме того, вы действительно не нужно 2 переменные, чтобы сделать то, что вы хочет, то iя нечетного число может быть вычислено на основе индекса:

for (int i = 0; i < elements.length; i++) 
    elements[i] = i*2 + 1; 
1

Вы замена значения массива в каждой итерации я на 9 (1,3,5,7,9 соответственно)

Try Ниже

for(int i=0; i<5;){ 
    for(int j=1; j <= 10; j=j+2,i++){ 
     element[i] = j; 
    } 
} 

Вы также можете написать это в одном цикл

for(int j=1,i=0 ; j <= 10 && i<5; j=j+2,i++){ 
    element[i] = j; 
} 

Выход

enter image description here

+2

Какова цель первого цикла? – BackSlash

1

Когда в последний раз внутренний цикл выполнения значение из j = 9 и когда j стать 11 он выходит. Вы сохраняете каждое значение j в том же индексе. то есть. вы переписываете element[i] каждый раз во внутреннем цикле, а i не изменяется во внутреннем цикле. Таким образом, доступно только окончательное значение j.
Ниже кода даст первые пять нечетных чисел, т.е. (1, 3, 5, 7, 9)

for(int i=0,j=1; i <= 4; j=j+2,i++) 
{ 
    element[i] = j; 
} 
0

用 一层 для 循环 就 可以 了

Int элементов [] = новый INT [5];

for (int i=0,j=1; j<=10; i++, j=j+2) 
    { 
     elements[i] = j; 
    } 

    for (int i=0; i<5 ; i++) 
    { 
     System.out.println(elements[i]); 
    } 
0
public static void main(String[] args) { 
    int[] element = new int[5]; 

    for (int i = 0; i < element.length; i++) { 
     element[i]=2*i+1; 
    } 

    for(int i : element){ 
     System.out.println(i); 
    } 
}