【问题标题】:Java: '.class' expected error when passing array to function [closed]Java:将数组传递给函数时出现“.class”预期错误[关闭]
【发布时间】:2014-03-23 17:40:28
【问题描述】:

我正在学习 Java 课程,但已经离开了一段时间。

试图让这个排序程序工作:

import java.util.*;
public class Assignment1 
{
   private int[] nums;
   private int[] ast;

   private int n;

   public void sort(int[] vals)
   {
      this.nums = vals;
      n = vals.length;
      this.ast = new int[n];
      merges(0, n - 1);
   }   

   private void merges(int bot, int top)
   {
      if (bot < top)
      {
         int mid = bot + (top - bot) / 2;
         merges(bot, mid);
         merges(mid + 1, top);
         merge(bot, mid, top);
      }
   }

   private void merge(int bot, int mid, int top)
   {
      for (int i = bot; i <= top; i++)
      {
         ast[i] = nums[i];
      }
      int i = bot;
      int j = mid + 1;
      int k = bot;
      while (i <= mid && i <= top)
      {
         if (ast[i] <= ast[j])
         {
            nums[k] = ast[i];
            i++;
         }
         else
         {
            nums[k] = ast[j];
            j++;
         }
         k++;
      }
      while (i <= mid)
      {
         nums[k] = ast[i];
         k++;
         i++;
      }
   }

   private void show()
   {
      System.out.print("Sorted Array:  ");
      for(int l=0;l<nums.length;l++)
      {
         System.out.print(nums[l] + "  ");
      }

   }
   public static void main(String[] args) 
   {
      Assignment1 a = new Assignment1();
      Scanner scan = new Scanner(System.in);
      System.out.print("\nArray Size: ");
      int s = scan.nextInt();
      int[] array = new int[s];
      for(int x=0;x<s;x++)
      {
         System.out.print("Enter Element " + (x + 1) + ":");
         array[x] = scan.nextInt();
      }


      a.sort(array[]);
      a.show();
   }
}

我得到的错误是:

Assignment1.java:82: error: '.class' expected
  a.sort(array[]);

我知道这是一些基本的东西让我难以捉摸,但基本的东西是最模糊的......

【问题讨论】:

  • 只是没有[]的数组
  • @SotiriosDelimanolis,讽刺和批评是没有帮助的。在这里让他知道他错了,而不是批评。
  • @ylun Sotirios Delimanolis 的问题是有效且值得的。如果 OP 反映并回答它们,他可以自己得出结论。
  • 我实际上首先将它作为(数组)。我只是更改了它,因为我在运行程序时遇到了错误。因此,在固定(数组)后,我在 Assignment1.merges(Assignment1.java:24)处的 Assignment1.merge(Assignment1.java:39)处的线程“main”java.lang.ArrayIndexOutOfBoundsException:5 处得到一个异常。 Assignment1.java:23) 在 Assignment1.sort(Assignment1.java:14) 在 Assignment1.main(Assignment1.java:82)
  • @ShengLong916 在尝试调试您的新问题后,您可能希望打开一个专门针对它的新问题,而不是在这里一概而论。 ArrayIndexOutOfBoundsException 表示它所说的内容,您应该搜索数组索引可能超出范围的可能位置。临时打印输出和单步调试调试器(如果有可用的调试器)可以帮助快速解决此类问题。

标签: java arrays parameter-passing


【解决方案1】:

我相信编译器认为您正在尝试将类类型传递给sort,因为您在对sort 的调用中在数组之后添加了[],这是您声明数组类型的方式。

改变一下

a.sort(array[]) 

 a.sort(array)

因为您已经在方法的前面将array 初始化为int[] 类型/数组。

您只需要在初始化过程中添加[]。之后,数组的变量名被引用,就像任何其他变量的变量名一样。

【讨论】:

  • +1 这很好地解释了为什么编译器可能会生成该消息。我想不出一个合理的解释。
【解决方案2】:

您的sort (int[] vals) 采用int[] 参数。

您的int[] array 已经属于该类型,您只需自行传递array。变量的名称是array,它的类型是int[]。当你将变量传递给一个函数时,你通过它的名字来引用它。没有“array[]”,这不是一个有效的构造。

从语法上讲,array[] 是无效的,但假设它是有效的,我想它的类型是 int(其中一个元素的类型)而不是 int[]

“.class 预期”编译器错误具有误导性。 array[] 语法无效,我猜编译器的混淆会导致意外的错误消息(编辑:在 mdewitt 和 Meriton 的答案中给出了对该错误的很好解释)。

顺便说一下,Java 确实支持 int array[]; 语法,相当于 int[] array;。就我个人而言,我从不喜欢这种歧义,我尽可能使用前一种语法。如果您看到这种语法,请不要混淆——名称仍然是array,类型仍然是int[]

【讨论】:

    【解决方案3】:

    Assignment1.java:82: 错误:'.class' 预期 a.sort(array[]);

    这意味着错误出现在 Assignment1.java 的第 82 行。那行写着:

      a.sort(array[]);
    

    这显然不是有效的 java 语法。您不能使用空方括号对变量进行后缀。如果您的意思是传递数组对象,只需使用变量本身:

      a.sort(array);
    

    换句话说,传递数组没有特殊的语法。您可以像传递任何其他对象或原始值一样传递数组。

    空方括号只能用于表示数组类型,在这种情况下,它们跟在组件类型之后。如果我们采用这种解释,array 必须是类型而不是变量,array[] 将表示类型而不是表达式。当然,你不能在方法参数中传递一个类型,但是你可以传递那个类型的类对象:

      a.sort(array[].class);
    

    这就是编译器认为你正在尝试做的事情。当然,这是无稽之谈,因为这不会是类型正确的,因为排序方法需要一个数组而不是类对象,而数组并不表示开头的类型。换句话说,编译器猜错了你的意思,因此给你一个不相关的错误信息。

    【讨论】:

      猜你喜欢
      • 2014-12-10
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2016-02-19
      • 2019-07-28
      相关资源
      最近更新 更多