Как избавиться от нуля, который появляется после того, как все мои элементы в моем массиве перечислены?
Я должен сделать программу, которая печатает элементы массива, заполненные случайными числами назад, но он также выводит ноль после моих переменных? я думаю, что это как-то связано с моими циклами, но я получаю 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.