【问题标题】:I couldn't make this programm run as I wanted我无法让这个程序按我的意愿运行
【发布时间】:2026-01-13 22:25:02
【问题描述】:
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 语句之外,我没有得到任何其他结果。

【问题讨论】:

  • 预期的结果是什么?
  • 你不是说if(numbers.length != 1)吗?
  • args.length 可能不等于 1。
  • 我对您的代码进行了格式化,并尝试为您的意图添加更多含义。我并没有试图彻底改变我的看法。你的问题没有意义。什么不工作?你打算用这段代码做什么?
  • 这段代码对我来说似乎工作正常。运行 arg of Tom 打印:“Tom: 555-3322”,如预期的那样。同意 WonderWorld 的观点,也许你的程序的命令行执行没有像你期望的那样传入 args。

标签: java


【解决方案1】:

您的代码几乎没有错误。来自

用法:java手机

看起来args 数组的预期内容应该是"Phone" &lt;name&gt; 这是两个元素所以

if(args.length != 1) 

不是有效条件。您可能应该将其替换为

if (args.length < 2)

另一个问题是&lt;name&gt;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 &lt; numbers.length; i++) 循环仅在i&lt;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 的代码包围在块{...} 内。

【讨论】:

  • 我已按照您的步骤进行,但我会像开头一样继续
  • 您可以在pastebin.com 发布您当前的代码并分享链接吗?另外你是如何尝试运行它的?
  • 我已经按照你所说的做了,但就像开始一样,不要启动任何电话号码。我认为我没有运行良好的参数。
  • 您忘记在if(i == numbers.length-1) 之后删除;,正如我的回答末尾所解释的那样,System.out.println("Name not found."); 独立于if。还可以考虑打印您使用的参数。也许这会帮助您跟踪您的问题(使用System.out.println(Arrays.toString(args));)。
  • 我继续做它长大,但它很好老兄,我会做一个新的,ty为你的帮助以及
【解决方案2】:

您可能在没有指定参数的情况下运行此 java 代码。
例如。 java Phone 将输出为 Usage: java Phone
但是如果你用一个参数运行它,你肯定会有一个输出。
例如。 java Phone Tom 将输出为 Tom: 555-3322

【讨论】:

    【解决方案3】:

    您的代码中有两个小错误。一个与您没有为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.");
    }
    

    【讨论】:

      最近更新 更多