java - 类对象数组中元素的存储不当

标签 java arrays eclipse string storing-data

我正在尝试创建一个程序,该程序是一个测验,根据大五人格测试来指定用户的心灵力量。首先,程序创建一个新的类对象和该对象的各种属性,例如用于跟踪结果的分数和大五属性的因素。(以及相关的心灵能力。)以保持跟踪。答案是根据提示引导的用户输入得出的。当我运行测试而不是打印五个类别中每个类别的结果时。它只是一遍又一遍地打印最后一个类别。此外,您在任何类别中可以获得的最高分是 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/

相关文章:

java - 如何解析 XML 标签 <m :properties> for my Android application using Java?

java - private static final double 为 0

C# 将 MySQL 结果拉入数组

android - 有没有办法在 Android 项目中将 Eclipse 与 Gradle 集成?

java - 如何在eclipse上使用java在黑莓中创建网页?

Java - 不能接受便士的自动售货机

java - Java 6 中的遍历文件树

arrays - 将数组中的标记添加到 Leaflet 中

javascript - 使用 Jquery 用索引或位置而不是键名解析 JSON 对象?

eclipse - 禁用 Eclipse JSF 方面/性质