2015-09-26 2 views
0

Я работаю над заданием, и мне не разрешено использовать Scanner. Вместо этого мы должны использовать int money = Integer.parseInt(args[0]). Я попытался написать свой код, и он компилируется, но есть ошибка времени выполнения, и мне было интересно, может ли кто-нибудь сказать мне, что я делаю неправильно, чтобы привести меня на правильный путь!Получение OutOfBoundsException при использовании массива args

Вот мой код:

class MakingChange { 
    public static void main(String[] args) { 
    int money = Integer.parseInt(args[0]); 
    int toonies = (money/200); 
    System.out.println(toonies); 
    } 
} 

И ошибка

java.lang.ArrayIndexOutOfBoundsException: 0 
at Money.main(Money.java:16) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272) 

Я не знаю, что делать этой ошибки! Любая помощь была бы принята с благодарностью

+6

Run программа с аргументом? –

ответ

1

Ну, ArrayIndexOutOfBoundsException означает, что вы пытаетесь получить доступ к индексу в памяти, который не используется или не инициализирован.

Похоже, что вы запускаете свою программу через командную строку; вам нужно передать аргументы в ваш скомпилированный файл .class, чтобы это можно было запустить.

2

Проблема здесь:

int money = Integer.parseInt(args[0]); 

Вы, вероятно, пытается получить доступ к первому элементу массива арг, но массив используется пуст (нулевые элементы).

Вы уверены, что имеете возможность передавать какие-либо параметры в свое приложение? Они должны быть разделен пробелами с программой, при выполнении скомпилированных программ (здесь приведен пример использования файла JAR):

java -jar MyProgram.jar 1234 

Вы можете добавить код обработки ошибок для того, чтобы предотвратить это, например, если заявление проверка ARGS размера массива:

int money = 0; 
if(array.size() != 0) { 
    money = Integer.parseInt(args[0]); 
} 

или даже с помощью примерки поймать блок:

try { 
    //.... 
    int money = Integer.parseInt(args[0]); 
    //.... 
} 
catch(ArrayIndexOutOfBoundsException e) { 
    //Error handling code here. 
    System.err.println(e.getMessage()); 
} 
+0

Я думал, что массив должен быть 0, таким образом я мог бы генерировать случайное число. Кроме того, когда я попытался проверить размер массива, Dr. Java сказал мне, что нет массива с именованным именем, и он не смог найти символ. Прошу прощения, если ответы на них очевидны, но я довольно новичок в программировании, и я здесь не понимаю. –

+0

Ну, 'args' - это массив Java, содержащий аргументы командной строки (обратите внимание, что' main() 'принимает его как аргумент) передается вашей программе при ее выполнении. 'args [0]' означает «первый элемент массива args» (в массивах, подсчет начинается с 0, поэтому 'args [0]' для первого элемента массива, 'args [1]' для второго и т. д.), , –

+0

Итак, что мне делать, чтобы исправить ошибку? –

2

Вы не проходящие никаких аргументов в вашу программу.

Добавьте это в начале вашего метода:

if (args.length == 0) 
    throw new IllegalArgumentException("No arguments found"); 

Чтобы передать аргументы, сделайте следующее:

java Money 123 
3

Вы должны написать оборонительный код, попробуйте следующее:

if(args.length>0){ 
    int money = Integer.parseInt(args[0]); 
    int toonies = (money/200); 
    System.out.println(toonies); 
}else{ 
    System.out.println("Missing Command Line Arguments"); 
} 
+0

Напечатано «Пропущенные аргументы командной строки». Что мне нужно добавить, чтобы исправить эту проблему, поскольку я просто хочу, чтобы случайное число было дано мне для этого задания? –

+0

вам нужно запустить свою программу из командной строки и предоставить аргументы командной строки. перейдите по этой ссылке: http://www.javatpoint.com/command-line-argument – AsSiDe

+1

ya вот что я в итоге сделал спасибо –

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