2013-10-03 4 views
2

предположим, что аргументы из командной строки: Привет это сообщениеномер печати аргументов командной строки приложения Java

Я хочу напечатать на экране количество аргументов, за один раз только и для печати на вершине.

также как печатать, «сообщение» перед «этим» или даже перед любыми аргументами, однако пользователь собирается писать «это» при индексе 0, а «сообщение» может быть по любому индексу?

for (int i=0; i < args.length; i++) 
{ 


if(i= args.length) {System.out.println(i);} //this command says, 
you cannot convert from int to boolean 

System.out.println(args.length); // this command prints repeatedly 



if (args[i].startsWith("this"){System.out.println(args[i]);} 

if (args[i].startsWith("message"){System.out.println(args[i]);} 

} // end of for 
+2

В чем вопрос? – qqilihq

ответ

2
if(i = args.length) //Here is the problem 

По ошибке вы используете единый '=' для сравнения я с args.length. Для сравнения i с args.length вам нужно использовать '=='.

Вам нужно сделать, как показано ниже

if(i == args.length) 
+0

как упоминалось в других ответах, это не единственная проблема, но, безусловно, большой – Cruncher

+0

получил это, спасибо вам, ребята –

+0

Да, это условие не получится. Но он запустит программу ......... – Prabhakaran

1

Ваше состояние никогда не true, он никогда не заходит внутрь.

См. Причину.

for (int i=0; i < args.length; i++) // looping with less than. 
{ 


if(i== args.length) {System.out.println(i);} // condition ==. 

Как это работает? Вы правильно поняли?

Если вы не можете получить добавление @ комментарий CruNcher в

Чтобы объяснить это немного лучше: я < args.length и я == args.length взаимоисключающие условия. То есть, если одно верно, то другое ложно. Вы должны быть правдивыми, чтобы войти в это, если.

+0

Чтобы объяснить это немного лучше: 'i Cruncher

1

i - это номер. args.length также номер. Ваша ошибка в том, что вы используете только один =, чтобы проверить равенство вместо ==. = используется для назначения новых значений. Таким образом, i получит значение args.length, и ваш if не может проверить, является ли число истинным или ложным.

Кроме того, вы должны использовать для каждого, а не для классического.

for (String argument : args) { 
    // do something with one argument 
} 

Даже если вам нужен указатель, у вас будет меньше ошибок в коде, если вы используете for-each. Для индекса я использую другую переменную int/long, которая получает инкремент внутри цикла.

0

System.out.println(args.length); печатает повторно, потому что он находится в режиме петли.

Если он должен быть напечатан только один раз и сверху, он должен быть перед петлей.

Кроме того, поскольку цикл работает от i = 0 до i < args.length, выражение i == args.length никогда не будет истинным внутри цикла.

0

Прежде всего, ваша логика немного сложнее, чем должно быть. Вы можете распечатать количество аргументов, просто передав args.length в println. Затем, если вы хотите распечатать определенные аргументы в порядке по вашему выбору, вы можете сделать цикл for для каждого из них, который найдет, существует ли такой аргумент, и, если это так, напечатайте его.

Пример:

for (int i=0; i < args.length; i++) 
{ 
if (args[i].startsWith("message"){System.out.println(args[i]);} 
} 

for (int i=0; i < args.length; i++) 
{ 
if (args[i].startsWith("this"){System.out.println(args[i]);} 
} 

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

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