2015-04-14 2 views
-5
public class Phone { 
    public static void main(String args[]) { 

     String numbers[][] = { { "Tom", "555-3322" }, { "Mary", " 555-8976" }, 
       { "Jon", "555-1037" }, { "Rachel", "555-1400" } }; 

     int i; 

     if (args.length != 1) 
      System.out.println("Usage: java Phone <name>"); 
     else { 
      for (i = 0; i < numbers.length; i++) { 
       if (numbers[i][0].equals(args[0])) { 
        System.out.println(numbers[i][0] + ": " + numbers[i][1]); 
        break; 
       } 
       if (i == numbers.length) 
        ; 
       System.out.println("Name not found."); 
      } 
     } 
    } 
} 

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

+3

Каков был ожидаемый результат? – Voldemort

+0

Вы не имеете в виду 'if (numbers.length! = 1)'? – JLewkovich

+0

Вероятно, 'args.length' не равно 1. – WonderWorld

ответ

1

Ваш код имеет несколько ошибок. От

Использование: Java Phone

это выглядит, как ожидается, содержание args массива должны быть "Phone"<name>, которые являются двумя элементами так

if(args.length != 1) 

не является действительным условием. Вы, вероятно, следует заменить его

if (args.length < 2) 

Другая проблема состоит в том, что <name> является вторым элементом в args массиве хранится в args[1] так

if(numbers[i][0].equals(args[0])) 

должен быть

if(numbers[i][0].equals(args[1])) //we want to compare name, not "Phone" string 

Последние проблемы включают

if (i == numbers.length); 
    System.out.println("Name not found."); 
  • внутри для цикла i никогда не будет равна только number.length, потому что for (i = 0; i < numbers.length; i++) итерацию цикла, если i<number.length. Таким образом, это условие должно быть заменено

    if (i == numbers.length -1) 
    
  • есть точка с запятой сразу после этого состояние, которое представляет собой пустую команду, которая означает, что

    if (i == numbers.length - 1); 
        System.out.println("Name not found."); 
    

    , по существу, такой же, как

    if (i == numbers.length - 1) 
        ; 
    System.out.println("Name not found."); 
    

    , что означает что выполнение System.out.println("Name not found."); не зависит от результата if состояние.

    Для того, чтобы решить эту проблему просто удалить этот дополнительный ;, и, чтобы избежать этой проблемы всегда окружают код, который должен зависеть от ifelseforwhile внутри блоков {...}.

+0

Я пошел за твоими шагами, но я продолжаю как в начале – Pingu

+0

Можете ли вы разместить сообщение на http://pastebin.com/ ваш текущий код и поделиться ссылкой? Также как вы пытаетесь запустить его? – Pshemo

+0

Я сделал то, что вы сказали, но так же, как начать, не запускайте какой-либо номер телефона. Я думаю, что у меня нет хороших аргументов. – Pingu

0

Возможно, вы используете этот код Java без указанных аргументов.
например. Java Phone даст выход в Использование: Java Phone
Но если вы запустите его с аргументом, вы, несомненно, есть выход.
например. Java Phone Том даст выход в Том: 555-3322

0

В вашем коде есть две небольшие ошибки. Один из них связан с тем, что вы не используете круглые скобки для if кода

if(i == numbers.length); 
    System.out.println("Name not found."); 

Проблема здесь не так легко обнаружить. После оператора if имеется точка с запятой, что означает, что для случая if не существует кодового блока, и всегда выполняется System.out.println.

Вторая проблема - вы проверяете i == numbers.length. Это никогда не бывает истинным в вашем for-loop, так как индекс массива основан на нулевом значении. Значит, когда у вас есть четыре записи, самый высокий индекс - три. Таким образом, это условие никогда не будет правдой.

Вы должны исправить код следующим образом.

if(i == numbers.length-1) { 
    System.out.println("Name not found."); 
} 
Смежные вопросы