【问题标题】:The operator < is undefined for the argument type运算符 < 未为参数类型定义
【发布时间】:2015-02-02 07:09:24
【问题描述】:

我并不讨厌我的 Java 编程老师,但我有一些编程经验,对于第一个项目,我想让老师赞叹不已。无论如何,我是 Java 新手,但对 C 有一定的了解。只是为了测试 Java 中的数组系统,我设计了这个程序。我想要它做的是问我数组的大小。我需要数组的大小,因为稍后我将用员工的姓名填充它。但我不断收到此错误...

package withholding_calculator;
import java.util.Scanner;

class withholding_calculator {
public static void main(String args[]) {
    //declaring variables
    Scanner size = new Scanner(System.in);
    String[] employeeNames = new String[size.nextInt()];

    for( int i = 0; i < size; i++ ) {
        System.out.println( employeeNames[i] );
        }
    }
}

【问题讨论】:

  • 你得到什么错误?
  • size 是一个 Scanner 对象。 int 怎么可能低于 Scanner?阅读docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html。并学会正确命名变量:命名扫描器size 会让自己感到困惑。 Java 中的类通常是 CamelCased:WithholdingCalculator。
  • 只是一点:你的类名应该以大写字母开头。首选WithholdingCalculator 或Withholding_calculator 而不是withholding_calculator

标签: java types arguments undefined operator-keyword


【解决方案1】:

对此有两点回应。

首先,您的 for 循环可以直接使用数组大小​​ (employeeName.length) 而不是引用扫描仪对象(错误是由于您将扫描仪与 int 进行比较引起的)。

其次,'c' 样式的数组在 Java 中的使用比在 C 中少得多。通常 Java 程序员会将其编码为:

List<String> employeeNames = new ArrayList<>();
// fill the list using employeeNames.add
for (String name: employeeNames)
    System.out.println(name);

在 Java 8 中,最后两行可以大大简化为:

employeeNames.forEach(System.out::println);

话虽如此,使用标准数组仍然是完全合理的,如果您比较数组的长度而不是您的扫描仪,您的代码应该可以正常工作。

【讨论】:

  • Java 8 程序员可能会这样写,早期版本会使用 for (String employee : employeNames) { ... }
  • @sprinter 如果 OP 正在学习数组,我认为使用泛型和 lambda 还为时过早。不知道为什么需要一个变量来存储数组长度,因为每个数组都有一个长度:employeeNames.length.
  • @JBNizet 我不同意“有点太早了”的评论——我实际上认为如果他们学得早,他们会简化语言。函数式编程真的很自然——只有老前辈(比如我)觉得很难!但你在数组长度上是对的 - 我会改变我的答案。
  • @sprinter 当您了解可以将对象(或本例中的函数)传递给方法以及可以解密错误消息时,它们会变得很自然。 OP 仍然不明白“运算符
  • @JBNizet 是的,公平点。虽然我确实认为 List 对于这类问题更容易理解。
猜你喜欢
  • 1970-01-01
  • 2016-01-26
  • 2018-06-26
  • 2018-06-30
  • 2018-04-10
  • 2021-07-03
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多