Вывод нечетных чисел в Java

640
02 ноября 2017, 04:56

Есть метод, который выводит нечетные числа от 1 до 100

public String printUnpared() {
    for (d = 1; d <= 100; d++) {
            if (d % 2 != 0)  {
                    unpared[d] = d;
            }
    }
    String stringUnpared = Arrays.toString(unpared);
    return stringUnpared;

И получаю вывод

[0, 1, 0, 3, 0, 5, 0, 7, 0, 9, 0, 11, 0, 13, 0, 15, 0, 17, 0, 19, 0, 21, 0, 23, 0, 25, 0, 27, 0, 29, 0, 31, 0, 33, 0, 35, 0, 37, 0, 39, 0, 41, 0, 43, 0, 45, 0, 47, 0, 49, 0, 51, 0, 53, 0, 55, 0, 57, 0, 59, 0, 61, 0, 63, 0, 65, 0, 67, 0, 69, 0, 71, 0, 73, 0, 75, 0, 77, 0, 79, 0, 81, 0, 83, 0, 85, 0, 87, 0, 89, 0, 91, 0, 93, 0, 95, 0, 97, 0, 99]

Как вывести нечетные числа без нулей не используя ArrayList? Как начать массив с 1, а не с 0? Нужно вернуть через return, выводить через System.out.print нельзя.

Answer 1

Можно использовать ArrayList:

public String printUnpared() {
    List<Integer> unpared = new ArrayList<Integer>();
    for (d = 1; d <= 100; d+=2) {
      unpaired.add(d);
    }
    String stringUnpared = Arrays.toString(unpared.toArray());
    return stringUnpared;
}

Либо рассчитывать нечётное число отдельно от индекса:

    for (i = 0, d = 1; d <= 100; i++, d+=2) {
      unpaired[i] = d;
    }
Answer 2

Есть несколько способов. Неизвестно только что именно вам нужно.

  • Например все складывать в строку и возвращать её:

    StringBuilder builder = new StringBuilder();
        for (int d = 1; d <= 100; d++) {
            if (d % 2 != 0)
                builder.append(d).append(" ");
        }
    return builder.toString();
    
  • Еще вариант в два цикла. Один раз придется пробежаться и узнать количество нечетных чисел. Создать массив размерностью этого количества и еще одним циклом туда всё запихать.

Answer 3

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

  public class Unpared
    {
      private static int i = -1;
      private static int stop;
      public Unpared(int start, int stop){
         i = start -2;
         this.stop = stop;
      }  
      public int nextInt(){
        if(i+=2 < stop){
          return i;
        } else throw new NoSuchElementException();
      }
    }
Answer 4

Оптимальное решение:

public static String printOdd (int max) {
    int i = 1, a[] = new int[(max+1)/2];
    for (;i<=max;i+=2)
        a[(i-1)/2]=i;
    return Arrays.toString(a);
}

Массив, если хотите:

public static int[] Odds (int max) {
    int i = 1, a[] = new int[(max+1)/2];
    for (;i<=max;i+=2)
        a[(i-1)/2]=i;
    return a;
}
READ ALSO
Android Studio Вывод в меню

Android Studio Вывод в меню

Привет, есть у меня такой код:

280
Process finished with exit code -1

Process finished with exit code -1

После выполнения программы в IntelliJ IDEA в консоли появляется "Process finished with exit code -1"Вроде бы должно возвращать: "Process finished with exit code 0"

591
Как установить apk программно? [дубликат]

Как установить apk программно? [дубликат]

На данный вопрос уже ответили:

209
Один и тот же метод во многих Activity

Один и тот же метод во многих Activity

Недавно начал изучение java и android и решил написать приложениеЕсть некий метод loadData(List<Item> itemList);, который на вход принимает коллекцию

227