【问题标题】:Getting an input variable from an array in Java从 Java 中的数组中获取输入变量
【发布时间】:2017-04-06 03:59:32
【问题描述】:

我正在尝试在此数组中打印学生的姓名。我不断收到一条错误消息,上面写着,

[Ljava.lang.String;@55f96302

我在顶部附近声明并初始化名称,并尝试使用“System.out.println(”学生“+Names+”的平均分数为:“+avg);”打印它但显然,仅拥有名称并不是解决方案。如何修复我的代码?

import java.util.Scanner;

public class Grades {
    //An array to hold the student names
    String[] Names = new String[6];

    //An array to hold students letter grades
    char[] LetterGrades = new char[6];

    //an array to hold each of the students test scores
    double[] Test1Scores = new double[6];
    double[] Test2Scores = new double[6];
    double[] Test3Scores = new double[6];

    void EnterData() {
        //initialize the scanner to parse the user inputs
        Scanner sc = new Scanner(System.in);

        //initialize the for loop and create iterations from 0 to 6  
        for (int i = 0; i < 6; i++) {
            //get user's name
            System.out.print("Enter the name of student " + (i + 1) + ": ");
            Names[i] = sc.next();

            //Create a while loop to get each of the students test scores
            do {
                System.out.print("Enter the score for Test 1: ");
                Test1Scores[i] = sc.nextDouble();
            } while (Test1Scores[i] < 0 || Test1Scores[i] > 100);
            do {
                System.out.print("Enter the score for Test 2: ");
                Test2Scores[i] = sc.nextDouble();
            } while (Test2Scores[i] < 0 || Test2Scores[i] > 100);
            do {
                System.out.print("Enter the score for Test 3: ");
                Test3Scores[i] = sc.nextDouble();
            } while (Test3Scores[i] < 0 || Test3Scores[i] > 100);
            System.out.println("Testscores: " + Test1Scores[i] + " " + Test2Scores[i] + " " + Test3Scores[i]);
        }
    }

    void GetNames() {
        for (int i = 0; i < 6; i++)
            System.out.println((i + 1) + ". " + GetName(i + 1));
    }

    String GetName(int studNumber) {
        return (Names[studNumber - 1]);
    }
    //prints the 3 test scores of the student
    void GetTestScores(int studNumber) {
        System.out.println(GetTestScore(studNumber, 1) + " ");
        System.out.println(GetTestScore(studNumber, 2) + " ");
        System.out.println(GetTestScore(studNumber, 3) + " ");
    }

    double GetTestScore(int studNumber, int testNumber) {
        if (testNumber == 1)
            return (Test1Scores[studNumber - 1]);
        else if (testNumber == 2)
            return (Test2Scores[studNumber - 1]);
        else if (testNumber == 3)
            return (Test3Scores[studNumber - 1]);
        return 0;
    }
    //calculate the average test score
    double GetAverageScore(int studNumber) {
        double avg = (Test1Scores[studNumber - 1] + Test2Scores[studNumber - 1] + Test3Scores[studNumber - 1]) / 3;
        System.out.println("The average scores of student "+Names+" is:"+avg);
        return avg;
    }

    void GetLetterGrades() {
        for (int i = 1; i <= 6; i++) {
            System.out.println("The letter grade of student " + (i) + " is: " + GetLetterGrade(i));
        }
    }

    char GetLetterGrade(int studNumber) {
        double sum = Test1Scores[studNumber - 1] + Test2Scores[studNumber - 1] + Test3Scores[studNumber - 1];
        char letterGrade;
        if (sum / 3 >= 90)
            letterGrade = 'A';
        else if (sum / 3 >= 80)
            letterGrade = 'B';
        else if (sum / 3 >= 70)
            letterGrade = 'C';
        else if (sum / 3 >= 60)
            letterGrade = 'D';
        else
            letterGrade = 'F';
        return letterGrade;
    }

    void GetClassAverage() {
        double sum = 0.0;
        for (int i = 0; i < 6; i++)
            for (int j = 0; j < 3; j++)
                sum += GetTestScore(i + 1, j + 1);
        System.out.println("The average of the class is: " + sum / 18);
    }

    void GetTopGrade() {
        char letterGrade;
        double top = GetAverageScore(1);
        for (int i = 2; i <= 6; i++)
            if (GetAverageScore(i) > top)
                top = GetAverageScore(i);
        if (top >= 90)
            letterGrade = 'A';
        else if (top >= 80)
            letterGrade = 'B';
        else if (top >= 70)
            letterGrade = 'C';
        else if (top >= 60)
            letterGrade = 'D';
        else
            letterGrade = 'F';
        System.out.println("The top score of the class is: " + letterGrade);
    }
}

【问题讨论】:

    标签: java arrays java.util.scanner


    【解决方案1】:

    你要打印的是学生的名字,但是变量Names是它的数组类型。

    所以你要做的就是改变

    System.out.println("The average scores of student "+Names+" is:"+avg);
    

    进入

    System.out.println("The average scores of student "+Names[studNumber]+" is:"+avg);
    

    这个。

    【讨论】:

    • 当我这样做时会打印名称,但我也会收到 java.lang.ArrayIndexOutOfBoundsException 通知,该类最高分应该在哪里。
    【解决方案2】:

    在您提供的示例中,您打印的是数组本身,而不是数组中的值。您需要遍历数组“名称”并单独打印出每个值。

    for( int i = 0;i<Names.length;i++){
        System.out.println(Names[i]);
    }
    

    【讨论】:

      【解决方案3】:

      如果您想在字符串中打印学生姓名,例如学生 a,b,c 的平均分数为:100

      您可以创建一个方法,该方法通过迭代元素并使用该方法返回输入字符串数组的逗号分隔值: "学生"+csvStringMethod(Names)+"的平均成绩为:"+avg

      【讨论】:

        【解决方案4】:

        感谢您的帮助,但我能够让它与以下内容一起工作:

        System.out.println("The average scores of student " + Names[studentNumber - 1] + " is:"+avg);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-30
          • 2012-01-29
          • 1970-01-01
          • 1970-01-01
          • 2020-10-22
          • 1970-01-01
          相关资源
          最近更新 更多