【问题标题】:Error Trying to Create Array of Double Variable Type尝试创建双变量类型的数组时出错
【发布时间】:2017-07-09 20:39:04
【问题描述】:

我正在尝试创建一个程序,该程序从用户那里获取双精度值并将它们存储在数组中,然后再对它们进行除法和四舍五入。但是,我在尝试创建双数组时不断收到错误消息。

 double n = sc.nextDouble();

    double a[] = new double[n];
    double b[] = new double[n];
    double roundedValues[] = new double[n];

    for (double i = 0; i < a.length; i++) {
        System.out.println("Please enter the values you would like to divide as pairs of two numbers: ");
        // Read pair and store it inside i-th position of a and b arrays 
        System.out.println("Enter first number: ");
        a[i] = sc.nextDouble();
        System.out.println("Enter second number you would like to divide by: ");
        b[i] = sc.nextDouble();
        roundedValues[i] = Math.round(a[i] / b[i]);
    }

我在声明数组的地方遇到的错误是:

不兼容的类型:从 double 到 int 的可能有损转换

【问题讨论】:

  • 双倍元素的数组是什么意思?我从未见过包含 3.2734 个元素的数组。
  • 为什么使用 double 作为计数器 (i)?使用整数。
  • 我已将循环中的控制变量更改为 int 并解决了该问题,但我在声明数组的行上仍然遇到相同的错误。你能帮我理解为什么吗?我想在我创建的数组中存储十进制数的值。谢谢
  • 查看 Eran 的评论。您仍在使用“双”个元素创建 a[] 和 b[] 。括号中的任何内容都必须是 int。
  • 好的。我想在我创建的数组中存储十进制数的值,因此我尝试将数组初始化为双精度数。我想我明白我哪里出错了,我认为 int 负责可以存储在数组中的值的类型。有没有办法可以在数组中存储 double 类型的值?

标签: java arrays loops double


【解决方案1】:

首先,变量n,定义为double n = sc.nextDouble();是一个double。你不能创建一个长度为双精度的数组,因为那样你可能会得到半个元素。想象一个 4.5 个元素长的数组!

n 定义为以下之一:

int n = sc.nextInt()

int n = (int)sc.nextDouble();

其次,i也是一个double!像这样定义它:

for (int i = 0; i &lt; a.length; i++) {

这样编译器就知道i 是一个整数,并且不必担心需要检索double 索引处的元素,比如第4.2 个元素! (不存在也不应该存在)

这是固定代码:
int n = sc.nextInt();

double a[] = new double[n];
double b[] = new double[n];
double roundedValues[] = new double[n];

for (int i = 0; i < a.length; i++) {
    System.out.println("Please enter the values you would like to divide as pairs of two numbers: ");
    // Read pair and store it inside i-th position of a and b arrays 
    System.out.println("Enter first number: ");
    a[i] = sc.nextDouble();
    System.out.println("Enter second number you would like to divide by: ");
    b[i] = sc.nextDouble();
    roundedValues[i] = Math.round(a[i] / b[i]);
}

【讨论】:

    【解决方案2】:
    a[i] and b[i] expect int type, but you supply double to it
    Should be 
     for (int i = 0; i < a.length; i++) {
    

     double n = sc.nextDouble();
       should be changed to:
     int n = sc.nextInt();
    

    【讨论】:

    • 例外是因为 OP 对 n 使用双精度,并试图将其声明为数组声明中的元素数。
    • 我已将循环中的控制变量更改为 int 并解决了该问题,但我在声明数组的行上仍然遇到相同的错误。你能帮我理解为什么吗?我想在我创建的数组中存储十进制数的值。谢谢
    • 将您的 n 变量更改为 int 并使用 nextInt() 而不是 nextDouble()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多