2015-10-17 4 views
1

Я должен заполнить массив диапазоном (здесь n) нечетных чисел: 1,3,5,7,9 ... Но у меня всегда есть 0 между каждым нечетным числом, и я не знаю Не понимаю почему.Заполнение массива с нечетными номерами

Примечание: код под заглавными буквами в комментариях были даны нашим профессором ...

Вот код:

public class F5B1 { 

    public static java.util.Scanner scanner = new java.util.Scanner(System.in); 

    public static void main(String[] args) { 

     // Creation of Array : DON'T CHANGE THIS PART OF THE PROGRAM. 
     System.out.print("Entrez n : "); 
     int n = scanner.nextInt(); 
     int[] t = new int[n]; 
     int i; 


     // fill the array : PART OF THE PROGRAM TO FULFILL 
     // INSTRUCTIONS : 
     // ADD NO ADDITIONAL VARIABLES 
     // DON'T USE ANY OF THE MATH METHODS 
     // DON'T ADD ANY METHODS 

     // I wrote this piece of code 
     for (i = 0; i < t.length; i++) { 
      if (i % 2 != 0) { 
       t[i] += i; 
      } 
     } 

     // display of the array : DON'T CHANGE THIS PART OF THE PROGRAM 

     System.out.println("Those are the odd numbers : "); 
     for (i = 0; i < t.length; i++) { 
      System.out.println(t[i]); 
     } 
    } 

} 

Выход:

Enter n : 10 
Those are the odd numbers : 
0 
1 
0 
3 
0 
5 
0 
7 
0 
9 
+0

вы можете оставить выход тоже? – dsharew

+0

Да, конечно, я сделаю это – algorithmic

+0

Ваш профессор дает вам плохие советы, если вы объявляете 'i' вне цикла for –

ответ

2

Вы получаете 0 для каждого четного индекса, потому что значение в этом индексе никогда не устанавливается.

Эта линия:

int[] t = new int[n]; 

объявляет массив междунар длины n, где каждый элемент инициализируется в 0. Теперь рассмотрим код:

for (i = 0; i < t.length; i++) { 
    if (i % 2 != 0) { 
     t[i] += i; 
    } 
} 

Вы говорите: когда индекс мой массив нечетен, давайте поместим его в этот индекс, иначе ничего не сделаем (и держим 0). Это объясняет результат, который вы получаете.

Что вы хотите сделать, это не проверять, является ли индекс массива нечетным: вы хотите установить нечетное значение для каждого индекса массива. Рассмотрим этот код вместо:

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

Для каждого индекса, это устанавливает значение массива к нечетному числу (2n+1 всегда нечетно).

(Обратите внимание, что я написал = вместо +=: он дает намерения лучше и не полагаться на то, что массив был инициализирован с 0)

+0

Amazing, большое спасибо за ваши быстрые ответы! :) Я теперь понимаю свою ошибку – algorithmic

0

Попробуйте это вместо этого:

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

Проблема в том, что это:

int[] t = new int[n]; 

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

+0

Спасибо за помощь! – algorithmic

2

С Java 8, IntStream это так просто, как:

IntStream.range(0, n).filter(element -> element % 2 != 0) 
        .forEach(System.out::println); 

Использование:

public class F5B1 { 

    public static java.util.Scanner scanner = new java.util.Scanner(System.in); 

    public static void main(String[] args) { 
     System.out.print("Entrez n : "); 
     int n = scanner.nextInt(); 
     IntStream.range(0, n).filter(element -> element % 2 != 0) 
       .forEach(System.out::println); 
    } 
} 
+0

Спасибо, я узнал что-то новое! , я никогда не слышал об этом – algorithmic

+0

Проблема в том, что ответ перезаписывает часть кода профессора. – Tunaki

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