2014-11-22 1 views
1

У меня есть метод, который принимает: с переменным числом аргументовКак проверить ARG в переменной длины

public static void main(String... args) throws Exception { 

Я пытаюсь установить значение переменной на основе, если аргумент передается или нет. В этом случае я хочу знать, был ли передан 8-й аргумент, и если это так установлено значение переменной для значения этого аргумента, в противном случае используйте пустую строку. Я не могу жестко закодировать в args [8] в логической части истинного результата, потому что это приводит к ошибке компиляции, когда она выполняется только с 7 аргументами. Так что я попытался следующие, но это также ошибки из:

String titlePrefix = ((args.length!=8) ? "" : args[args.length]); 

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

Спасибо заранее.

+1

факт, что вы заботитесь о «8-м аргументе», подразумевает, что вы неправильно используете varargs. Если вашему методу нужно делать разные вещи на основе 7 или 8 аргументов, напишите два метода и назовите их параметры метода. –

+1

Он всегда будет давать ошибку, если есть аргументы '8'. Это должно быть 'args [args.length - 1]'. –

+0

Майк, спасибо. Я не знал, что могу перегрузить «главное». Я никогда не думал об этом раньше, поэтому я узнал что-то новое. Спасибо. – Trebor

ответ

1

арг [args.length] должны быть арг [args.length -1]

+0

Спасибо! Вот и все. Я попытался настроить нулевую базу, но ошибочно использовал args [args.length] -1) вместо ваших args [args.length -1]. Спасибо за хороший глаз. – Trebor

1
String titlePrefix = ((args == null || args.length<8) ? "" : args[7]); 

А почему?

Во-первых, вам может понадобиться 9-й или 10-й аргумент в будущем. Наличие 9 аргументов означает, что присутствует 8-й аргумент, поэтому вы должны проверить, есть ли у вас не менее 8 аргументов, а не у вас есть точно 8 аргументов.

Во-вторых, по той же причине вам не следует назначать последний аргумент, но точный 8-й аргумент. В конце концов, последним аргументом может быть 9-й или 10-й или 100-й.

Но даже если вы тестировали последний аргумент, помните, что массивы в Java (а varargs - просто замаскированный массив) начинаются с индекса 0 до индекса length-1. Первый аргумент - args[0], второй - args[1], а восьмой - args[7]. Поэтому, чтобы проверить последний аргумент, вы должны использовать args[args.length-1].

При работе с varargs обычно лучше также сначала проверить значение null (хотя, когда речь идет о методе main, это, вероятно, не произойдет).

+0

RealSkeptic, это отличное решение (с помощью <8), но приведет к ошибке, если бы у меня было менее 7 аргументов. В моем случае у меня всегда будет как минимум 7 аргументов, так что это не проблема.Но это заставляет меня задаться вопросом: как бы это сделать, если аргументы 7 и 8 были необязательными? – Trebor

+0

Зачем было причиной ошибки, если у вас было менее 7 аргументов? Если у вас было менее 7 аргументов, он присваивает "" titlePrefix'. Почему это ошибка? – RealSkeptic

+0

args [7] приведет к ошибке компиляции. Вот почему я использовал args.length – Trebor

1

Проверьте это. Я думаю, это именно то, что вы ищете.

public class Test001 { 

    public static void main(String... args) throws Exception { 
     for (int i=0; i<8; i++){ 
      String val = args.length <= i ? "" : args[i]; 
      System.out.println("arg[" + i + "] = [" + val + "]."); 
     } 
    } 

} 
+0

Питер, спасибо, но это требует прокрутки аргументов, которые в моем случае не были необходимы. У меня был только один аргумент, который был необязательным, для которого мне нужно было проверить. Спасибо. – Trebor

+0

О, хорошо ... Я просто дал вам более общее решение. –

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