У меня есть Java-программа, которая принимает аргументы командной строки, а затем преобразует десятичное значение в его шестнадцатеричный аналог. Я пытаюсь использовать блок кода обработки исключений (try / catch), который не запускается. Блок try / catch предназначен для запуска, когда в программу не передаются аргументы командной строки.
Выполнение программы через Jenkins / SonarQube для выявления запахов кода и устранения проблем. Использовали процесс проб и ошибок, чтобы поэкспериментировать с различными возможностями, чтобы увидеть, смогу ли я устранить недостатки дизайна.
https://pastebin.com/frBq46zs
//import java.util.Scanner;
public class Dec2Hex
{
public static int Arg1;
public static void main(String args[])
{
Scanner scan = new Scanner(System.in);
System.out.println("Enter any number: ");
//Arg1= scan.nextInt();
//scan.close();
if (args.length < 0)
{
try
{
Arg1 = Integer.parseInt(args[0]);
}
catch (NumberFormatException e)
{
System.err.println("Argument" + args[0] + " must be an integer.");
System.exit(1);
}
}
Использование, если (args.length > 0)
без значения командной строки приводит к тому, что исключение не вызывается. Я подумал, что этого следовало ожидать, потому что блок исключений никогда не сработал бы, потому что условный оператор не был выполнен.
Однако обратное утверждение оказалось не таким, как ожидалось. Я подумал, что если (args.length==0)
, то это будет означать, что «никакие аргументы не были переданы, попытка проанализировать введенное значение в командной строке. Если все же, несмотря на это, никакое значение не может быть проанализировано, ТО запускается оператор catch, генерирующий сообщение об ошибке». и выведите его пользователю. "
Всякий раз, когда я использую args.length==0
или args.length<0
без аргументов командной строки, все, что я получаю, это:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
Сообщение, которое конкретно ссылаетсяна следующую строку кода:
Arg1 = Integer.parseInt(args[0]);