Как избавиться от нуля, который появляется после того, как все мои элементы в моем массиве перечислены?

Я должен сделать программу, которая печатает элементы массива, заполненные случайными числами назад, но он также выводит ноль после моих переменных? я думаю, что это как-то связано с моими циклами, но я получаю java.lang.ArrayIndexOutOfBoundsExceptionошибка каждый раз, когда я пытаюсь изменить их.

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

import java.util.*;

public class EZD_printBackwards
{
    static int vars[] = new int[10];

    static int backwards()
    { 
        Random rand = new Random();
        int bkwds = vars[0];

        for (int a = 0; a < 10; a++) 
        {
            vars[a] = rand.nextInt(100)+1;
        }

        for (int x = 10; x > 0; x--)
        {
            System.out.println("Element " + x + " is " + vars[x] );      
        }
        return bkwds;
    }

    public static void main(String Args[])
    {

       int option;
       Scanner kbReader = new Scanner(System.in);

       do
       {
           System.out.println(backwards());
           System.out.print("Type 1 to run again. Type 0 to end the program.");
           option = kbReader.nextInt();

           while(option !=1 && option !=0)
           {

               if (option != 1 && option != 0)
               {
                   System.out.print("Please enter 1 to run again or 0 to end the program.");
                   option = kbReader.nextInt();
               }
           }

       }while(option==1);

       System.out.println("");
    }
}

5 ответов

Решение

У вас есть две проблемы:

FIRST => Для цикла вне границ

Вы хотите пройти через 10 элементов, поэтому ваш

for (int x = 10; x > 0; x--)

должно быть

for (int x = 9; x >= 0; x--)

0..9 это 10 элементов и то же самое

for (int a = 0; a < 10; a++) 

в

for (int a = 0; a < 9; a++)

ВТОРОЙ ==> 0 в конце

Это потому что ты делаешь

System.out.println(backwards());

вместо

backwards();

В вашем примере vars размер 10. Второй цикл for начинается с индекса x = 10 который больше, чем последний индекс переменной, потому что индекс массива начинается с нуля. Чтобы решить эту проблему, вы должны использовать это условие в цикле for:

 for (int x = vars.length -1; x >= 0; x--)
 {
  System.out.println("Element " + x + " is " + vars[x] );      
 }

Вы возвращаете значение "bkwds", и вы инициализируете "bkwds" с помощью vars[0], и я предполагаю, что в java компилятор инициализирует все значения массива с 0, другими словами, ваша проблема в System.out.println(backwards());

удалить его с

backwards();

и это должно работать!

РЕДАКТИРОВАТЬ

ваш внешний вид не ограничен или замените его этим

        for (int a = 0; a < 10; a++)

или сделай это

        for (int a = 9; a > 0; a--)

Поскольку массивы индексируются с нуля, измените на

System.out.println("Element " + x + " is " + vars[x-1] );    

выход

Element 10 is 31
Element 9 is 63
Element 8 is 82
Element 7 is 46
Element 6 is 67
Element 5 is 24
Element 4 is 3
Element 3 is 27
Element 2 is 37
Element 1 is 13

редактировать

И изменить это

System.out.println(backwards());

в

backwards();

Так как возвращаемое значение этого метода бесполезно и не используется, измените этот метод, чтобы вернуть void

Диапазон вашего массива составляет от 0 до 9. Включая цикл, однако, ваш цикл for начинается с 10 и падает до индекса 1. Он должен начинаться с 9 и сводиться к индексу ноль. Это, однако, не объясняет печать случайного 0! Причина этих нулей в том, что у вас есть int bkwds, для которого в начале вашей функции вы установили vars[0]. Но, так как он не инициализирован, он будет установлен в 0 (по умолчанию для int). Вы вызываете функцию main в операторе print, который, как я полагаю, продолжает печатать эту ложную, бесполезную инициализированную переменную, которую вы возвращаете:)

Вы определяете переменную []. Его элементы имеют значение 0 по умолчанию. Затем вы помещаете bkwds = vars[0], так что его значение становится равным 0, и вы возвращаете его своим методом backwards(), который вы печатаете в System.out.println(). Таким образом, метод запустится, у него есть метод System.out.println () и он напечатает то, что вы сказали в нем. затем println () в методе печати main () возвращает значение backwards(), которое равно 0.

Другие вопросы по тегам