【问题标题】:Conditionally setting array variable type有条件地设置数组变量类型
【发布时间】:2018-07-06 21:34:42
【问题描述】:

我正在创建一个以图形方式显示点的 Java 程序。 坐标从 .txt 文件中读取并存储在适当类型的数组中,int[]double[]

以下代码说明了我想要什么。 (虽然它不起作用,因为Array 不是int[]double[] 的超类。)

//Declare local variable
Array coordinates;

//Determine data type
if(scan.hasNextInt()){
    coordinates = int[10];
} else if(scan.hasNextDouble()){
    coordinates = double[10];
}

我正在考虑使用多态性,如您所见,但我不知道int[]double[] 的超类是什么。他们的超类是什么?还是有更好的方法来进行这种条件输入?如果我使用 Object 超类来声明coordinates,那么它就不会作为数组起作用。


这是一个任务。我在这里尝试解决的细节如下:

程序读取[文本文件]的值,将它们转换为 适当的整数或双精度数,将它们内部存储在 数组。

我解释这意味着数组应该是它正在存储的类型,但也许它只是说将数组中的值存储为数值而不是原始的 String 类型...

【问题讨论】:

  • 您能否详细解释一下您的问题,您愿意将从文件中读取的intdouble 值存储到一个包含这两种类型的数组中吗?
  • 你应该使用double,不需要int类型。
  • int[]double[] 的超类是Object,并不是说它对你有任何帮助。你尝试的方法不起作用,你确定你已经正确理解了你的任务吗?您可以切换到包装类并使用Number[],但这也不是一个很好的解决方案(尽管有时老师会给出考虑不周的作业)。

标签: java arrays types conditional primitive


【解决方案1】:

如果使用双精度数组,它将能够同时包含整数和双精度:

    double[] coordinates = new double[10];

    coordinates[0] = 1.5; //double
    coordinates[1] = 2;   //integer

【讨论】:

  • 感谢您的回复!这就是我通常会做的事情,但这是针对课程和作业详细信息的:程序读取值,酌情将它们转换为整数或双精度数(浮点数),并将它们内部存储在数组中。
  • @MichelleB。该作业不禁止使用此答案。它没有说明数组的类型。
  • @Kayaman 感谢您指出这一点。你说得对。我让它变得比实际更复杂。
【解决方案2】:

java 原始类型没有超类——它们不是对象。但是,自动装箱会转换它们,因此您可以只使用数字数组,它是数字类的超类:

  Number[] numbers = new Number[3];

然后:

  numbers[0] = 1.5f;
  numbers[1] = 1;
  numbers[2] = 3.2d;

  for (Number n : numbers)
     log.info("Type: "+n.getClass().getName());

将返回:

Type: java.lang.Float
Type: java.lang.Integer
Type: java.lang.Double

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2022-10-16
    • 2014-01-04
    • 2023-01-20
    • 2022-07-13
    • 1970-01-01
    相关资源
    最近更新 更多