我对数组和方法都很陌生,我一直看到这个错误在几个程序中重复出现:错误'['预期。
在每种情况下,当我调整其他东西时,它似乎会纠正自己,但在这种特殊情况下,我完全被难倒了。
顺便说一下,我使用了几个方法和数组来创建一个测验(在你问之前,是的,这是一个任务,我同意,列表是处理这些数据的更好方法 - 但这不是一个选项)。
我可能没有在方法之间正确传递数组,因为我在这个过程中有点混乱。根据我的理解,为了在方法之间发送/接收(即导入/导出)数组或其他变量,我必须在方法头参数中声明该变量/数组。
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");
}
}
}
答案 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系列有点像成人着色书。
祝你好运!