我不能按照我的意愿运行这个程序

时间:2015-04-14 19:47:20

标签: java

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 个答案:

答案 0 :(得分:1)

您的代码错误很少。来自

  

用法:java手机

预计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.");
    内部for循环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条件的结果。

    要解决此问题,只需删除此额外的;,并避免此问题始终包含应该依赖于if else for while的代码阻止{...}

答案 1 :(得分:0)

您可能正在运行此java代码而未指定参数 例如。 java Phone 会将输出显示为用法:java Phone
但如果你用一个参数运行它,你肯定会有一个输出 例如。 java Phone Tom 将输出为 Tom:555-3322

答案 2 :(得分: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.");
}