我正在尝试创建一个程序,该程序是一个测验,根据大五人格测试来指定用户的心灵力量。首先,程序创建一个新的类对象和该对象的各种属性,例如用于跟踪结果的分数和大五属性的因素。(以及相关的心灵能力。)以保持跟踪。答案是根据提示引导的用户输入得出的。当我运行测试而不是打印五个类别中每个类别的结果时。它只是一遍又一遍地打印最后一个类别。此外,您在任何类别中可以获得的最高分是 25 分,最低分是 5 分。但是,它不是将分数平均分配到每个类别,而是将其全部集中到最后一个类别,最低分 25 分,最高分 125 分。
为了澄清,这是我的代码:
package com.polaris.quiz;
import java.util.Scanner;
public class BigFivePsychokinesisTest {
public static int questionCount = 1;
public static int score;
public static String factor;
public static String ability;
public int getScore()
{
return score;
}
public String getFactor()
{
return factor;
}
public String getPSIpower()
{
return ability;
}
public static void main(String[] args)
{
QuizStart();
}
public static void QuizStart() {
BigFivePsychokinesisTest[] ResultsArray = new BigFivePsychokinesisTest[5];
ResultsArray[0].factor = "Openness";
ResultsArray[1].factor = "Conscientiousness";
ResultsArray[2].factor = "Extraversion";
ResultsArray[3].factor = "Agreeableness";
ResultsArray[4].factor = "Neuroticism";
ResultsArray[0].ability = "Clarvoyiance";
ResultsArray[1].ability = "Telekinesis";
ResultsArray[2].ability = "Extra Sensory Perception";
ResultsArray[3].ability = "Telepathy";
ResultsArray[4].ability = "Precognition";
ResultsArray[0].score = 0;
ResultsArray[1].score = 0;
ResultsArray[2].score = 0;
ResultsArray[3].score = 0;
ResultsArray[4].score = 0;
System.out.println("Welcome to the discover your ESPER ability test. (This test is based off the Big Five Model of personality");
System.out.println("Please answer the questions honestly.");
System.out.println("You like to learn new things.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("You are a hard worker.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("You are very social with people.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("You get along well with others.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("Your often feel anxious.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("You have an active imagination.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("You get your work done as soon as possible.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("You talk to many people at parties.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("You try to avoid arguments.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("You have many doubts.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("You like to try new things.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("You like to use efficent methods.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("You are eager to speak and act.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("You like it when everyone gets along.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("Your often nervous about your situation in life.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("People sometimes precieve you as impractical and indecisive.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("People sometimes see you as inflexible and narrow minded.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("People sometimes see you as overwhelming and impatient.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("People sometimes see you as weak willed and politically correct.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("People sometimes see you as moody and high strung.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("It annoys you when people aren't open to discussing new ideas or trying new things.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("It annoys you when people waste time and don't take care of their responsibilities.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("It annoys you when people won't engage with you and ignore you.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
System.out.println("It annoys you when people seem insensitive to yours or others feelings.");
answerSelection(ResultsArray);
questionCount = questionCount + 1;
finalResults(ResultsArray);
}
private static void finalResults(BigFivePsychokinesisTest ResultsArray[])
{
int data;
int position;
data = ResultsArray[0].score;
position = 0;
aptitudeFinder(data, position, ResultsArray);
data = ResultsArray[1].score;
position = 1;
aptitudeFinder(data, position, ResultsArray);
data = ResultsArray[2].score;
position = 2;
aptitudeFinder(data, position, ResultsArray);
data = ResultsArray[3].score;
position = 3;
aptitudeFinder(data, position, ResultsArray);
data = ResultsArray[4].score;
position = 4;
aptitudeFinder(data, position, ResultsArray);
}
private static void aptitudeFinder(int data, int position, BigFivePsychokinesisTest ResultsArray[])
{
if(data >= 1 && data <= 5)
{
System.out.println("Your " + ResultsArray[position].ability + " aptitude is Insignificant.");
}
if(data >= 6 && data <= 10)
{
System.out.println("Your " + ResultsArray[position].ability + " aptitude is Low.");
}
if(data >= 11 && data <= 15)
{
System.out.println("Your " + ResultsArray[position].ability + " aptitude is Moderate.");
}
if(data >= 16 && data <= 20)
{
System.out.println("Your " + ResultsArray[position].ability + " aptitude is High.");
}
if(data >= 21 && data <= 25)
{
System.out.println("Your " + ResultsArray[position].ability + " aptitude is Exceptional.");
}
}
private static void answerSelection(BigFivePsychokinesisTest ResultsArray[])
{
Scanner inputDevice = new Scanner(System.in);
System.out.println("A - Almost never true.");
System.out.println("B - Sometimes true.");
System.out.println("C - Moderately true.");
System.out.println("D - Often true.");
System.out.println("E - Almost always true.");
String answer = inputDevice.next();
inputDevice.nextLine();
factorFinder(answer, questionCount, ResultsArray);
}
private static void factorFinder(String answer, int questionCount, BigFivePsychokinesisTest ResultsArray[])
{
if (questionCount == 1 || questionCount == 6 || questionCount == 11 || questionCount == 16 || questionCount == 21)
{
int factor = 0;
scoreFinder(factor, answer, ResultsArray);
}
if (questionCount == 2 || questionCount == 7 || questionCount == 12 || questionCount == 17 || questionCount == 22)
{
int factor = 1;
scoreFinder(factor, answer, ResultsArray);
}
if (questionCount == 3 || questionCount == 8 || questionCount == 13 || questionCount == 18 || questionCount == 23)
{
int factor = 2;
scoreFinder(factor, answer, ResultsArray);
}
if (questionCount == 4 || questionCount == 9 || questionCount == 14 || questionCount == 19 || questionCount == 24)
{
int factor = 3;
scoreFinder(factor, answer, ResultsArray);
}
if (questionCount == 5 || questionCount == 10 || questionCount == 15 || questionCount == 20 || questionCount == 25)
{
int factor = 4;
scoreFinder(factor, answer, ResultsArray);
}
}
private static void scoreFinder(int factor, String answer, BigFivePsychokinesisTest ResultsArray[])
{
switch(answer)
{
case "A":
ResultsArray[factor].score += 1;
break;
case "B":
ResultsArray[factor].score += 2;
break;
case "C":
ResultsArray[factor].score += 3;
break;
case "D":
ResultsArray[factor].score += 4;
break;
case "E":
ResultsArray[factor].score += 5;
break;
default:
System.out.println("Please enter an appropriate response.");
}
}
}
当代码运行时,它会打印:
你的预知能力非常出色。 你的预知能力非常出色。 你的预知能力非常出色。 你的预知能力非常出色。 你的预知能力非常出色。
什么时候应该打印:
你的千里眼能力微不足道。 你的心灵传动能力微不足道。 你的额外感官知觉能力微不足道。 你的心灵感应能力微不足道。 你的预知能力微不足道。
(请注意,当我对所有问题都回答 A 时,上面的示例就完成了。 我知道这是我的代码中的逻辑错误。但我的问题是......它是什么,以及如何将分数分配给特定的分数元素,而不是集中到一个。
最佳答案
您不会将结果存储在数组中,而是在每次尝试设置值时访问并覆盖静态字段。有关静态字段的更多信息,您可能需要阅读这篇文章:https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html .
您可以通过将分数、因子和能力声明为非静态成员变量来解决此问题
//...
public int score;
public String factor;
public String ability;
//...
并正确初始化你的数组
//...
BigFivePsychokinesisTest[] ResultsArray = new BigFivePsychokinesisTest[5];
for (int i = 0; i < ResultsArray.length; i++) {
ResultsArray[i] = new BigFivePsychokinesisTest();
}
//...
但是,您可能应该将这些字段移至单独的类中,并检查何时以及为何使用 static 关键字(即此处: Java: when to use static methods )。
关于java - 类对象数组中元素的存储不当,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34798434/