方法标题中的数组:错误']'预期(Java)

时间:2014-05-14 22:20:19

标签: java arrays methods compiler-errors

我对数组和方法都很陌生,我一直看到这个错误在几个程序中重复出现:错误'['预期。

在每种情况下,当我调整其他东西时,它似乎会纠正自己,但在这种特殊情况下,我完全被难倒了。

顺便说一下,我使用了几个方法和数组来创建一个测验(在你问之前,是的,这是一个任务,我同意,列表是处理这些数据的更好方法 - 但这不是一个选项)。

我可能没有在方法之间正确传递数组,因为我在这个过程中有点混乱。根据我的理解,为了在方法之间发送/接收(即导入/导出)数组或其他变量,我必须在方法头参数中声明该变量/数组。

import java.util.Scanner;

public class H7pseudo
{

  public static void main(String[] args)
  {
    //call getAnswerkey method
    getAnswerkey(answerkey[i]);

    //call getAnswers method
    getAnswers(answers[i]);

    //call passed method? necessary or no?
    boolean passed = passed(answerkey[i], answers[i], qMissed[i], points);

    //Print results of grading
    if (passed)
    {
      System.out.println("Congratulations! You passed.");
    }
    else
    {
     System.out.println("Try again, sucka. You FAILED.");
    }

    //call totalPoints
    totalIncorrect(points);

    //call questionsMissed
    questionsMissed(qMissed[i]);
  }

  //get answer key (create answerkey array & export)
  public static void getAnswerkey(answerkey[i])
  {
    //create answerkey array here
    char[] answerkey;

    //determine number of questions (indices)
    answerkey = new char[20];

    //input values (correct answers) for each index
    //for our purposes today, the answer is always 'c'.
    for (int i = 0; i <=20; i++)
    {
      answerkey[i] = 'c';
    }
  }

  //get student answers (create answers array & export)
  public static void getAnswers(answers[i])
  {
    //initialize scanner for user input
    Scanner scan = new Scanner(System.in);

    //create answer array here
    char[] answers;

    //determine number of questions (indices)
    answers = new char[20];

    //prompt for user input as values of each index
    for (int i = 0; i <= 20; i++) {
      answers[i] = scan.nextChar();
    }
  }

  //grade student answers (import & compare index values of arrays:answers&answerkey
  //create & export qMissed array
  public static boolean passed(answerkey[i], answers[i], qMissed[i], points)
  {
     int points = 0;

     //create new array: qMissed
     boolean[] qMissed;

     //determine number of questions to be graded
     qMissed = new boolean[20];

     //initialize values for array
     for (int i = 0; i <= 20; i++) {
       qMissed[i] = false;
     }

     //cycle through indices of answerkey[i] & answers[i];
     for (int i = 0; i =< 20; i++)
     {
       if (answers[i] == answerkey[i])
       {
         correct = true;
         points = points+1;
         qMissed[i] = true;
       }
       else {
         qMissed[i] = false;
       }
     }

     //evaluate whether or not the student passed (15+ correct answers)
     if (points >= 15)
     {
       passed = true;
     }
     else
     {
       passed = false;
     }
     return passed;
   }

  public static void totalIncorrect(points)
  {
    int missed = 20 - points;
    System.out.println("You missed " + missed + " questions.");
  }


  public static void questionsMissed(qMissed[i])
  {
    // for each index of the array qMissed...
    for (int i = 0; i < qMissed.length; i++)
    {
      //...print correct and false answers.
      system.out.println(i + ": " + qMissed[i] + "\n");
    }
  }


}

4 个答案:

答案 0 :(得分:0)

您无法在Java中定义方法签名中的数组大小。

答案 1 :(得分:0)

public static void getAnswerkey(answerkey[i])

您无法在方法声明中将[]内的任何内容放入其中。此外,你必须提到类型:

public static void getAnswerKey(char[] answerkey)

这不是您的代码无法按预期工作的唯一原因,但我会将其余部分作为练习的一部分。

答案 2 :(得分:0)

查看您的方法定义:

public static void questionsMissed(qMissed[i])

这是错误的。您应该定义变量的类型,它不应该包含[i],就像数组的元素一样。它应该是这样的:

public static void questionsMissed(int qMissed)

或者如果要传递数组,请按以下方式编写:

public static void questionsMissed(int[] qMissed)

除此之外,您的代码中还有其他几个错误:

getAnswerkey(answerkey[i]); //answerkey is not defined

getAnswers(answers[i]); //answers is not defined

如果你先开始阅读Java教程会更好。

答案 3 :(得分:0)

我想投票给Luiggi的答案,但我没有足够的声誉来做到这一点:)

恭喜,Cordivia,开始使用Java!

以下是声明数组的方式:

type[] arrayName = new type[numberOfElements]

例如,您在getAnswerkey()的方法定义中执行了此操作:

char[] answerkey;
answerkey = new char[20];

括号内的方法定义中的部分定义了方法愿意从 outside 接受的数据。因此,如果您不需要在方法中加入某些东西来获取某些东西,那么您就不需要在括号中添加任何内容。定义如下方法:

getAnswerkey() {

......但那不是全部故事。如果你想获取某些方法,它还需要一个返回类型返回类型是您在方法完成时所做的事情。例如,如果您想从方法中获取 int 数组,您可以执行以下操作:

public static int getTheInteger() {

由于您需要方法中的 chars 数组,因此您需要执行以下操作:

public static char[] getAnswerkey() {

这就是你如何得到一种方法来回馈你的东西。如果不想要任何回复,请添加 void

public static void noMarshmallows() {

现在,当你使用这种方法时,你需要对它给你的东西做些什么,或者它做了所有无效的工作。因此,当你调用数组时,你需要将返回值存储在一个变量中(调用方法就是你一直在做的事情主要)。您知道如何在变量中存储内容。你使用&#39; =&#39;操作者:

int myVeryFavoriteNumber;
myVeryFavoriteNumber = 5;

所以,当你从数组中获取某些东西时,你会做同样的事情。您返回值分配给变量。如果要使用数组执行此操作,请执行以下操作:

int[] myFavs;
myFavs = getMyFavoriteNumbers();

chars 相同:

char[] answerKey;
answerKey = getAnswerKey();

瞧!您的答案密钥现在已经公开,其余的主要可以看到:)

现在,如果您想将放入方法并让它对您所添加的内容执行某些操作,则可以定义参数。你知道这是如何工作的。它就像声明一个变量一样,而且就是它的确切含义。参数放在括号中,只有使用参数的方法才能看到变量名称(它是 local )。像这样:

public static void plusOneToAll (int[] numbers) {
    for (int i = 0; i < numbers.length; i++) {
        numbers[i] = numbers[i] + 1;
    }
}

注意括号中的 int []数字。传入的类型 int [] 或整数数组。 数字只是参数名称。它的功能就像一个变量,但它被声明为本地(在括号内)并使用 local (在方法内)。因此,如果您想比较两个数组的答案并返回匹配数(例如总分),您可以这样做:

public static int getTotalScore (char[] correctAnswers, char[] userAnswers) {

    int totalScore = 0;

    for (int i = 0; i < correctAnswers.length; i++) {
        if (userAnswers[i] == correctAnswers[i]) {
            totalScore = totalScore + 1;
        }
    }

    return totalScore;
}

注意返回类型: int (在方法名称之前写入)。 内部数组我使用变量 totalScore 来跟踪答案匹配的次数。方法从外部获取两个char数组,并在内部使用它们。最后,我返回 int totalScore 。这会将 totalScore 的值恢复到任何名称(主要)。

如果我可以添加最后一件事:帮自己一个忙,去拿一份 Head First Java 。很难在网上找到一本好的教程,Java教科书也很简单。 Head First系列有点像成人着色书。

祝你好运!