Java 使用扫描仪输入写入二维数组值

Java 使用扫描仪输入写入二维数组值,java,java.util.scanner,multidimensional-array,Java,Java.util.scanner,Multidimensional Array,我在编写getCategoryWeights方法时遇到了困难(在代码的底部)。它应该根据用户的输入更改权重列的值,但我不明白为什么它不起作用。以下是我目前的计划: package gradeprojector; //Done // Print a welcome message // printWelcomeMessage(); // Get the number of gradebook categories. // int categories =

我在编写getCategoryWeights方法时遇到了困难(在代码的底部)。它应该根据用户的输入更改权重列的值,但我不明白为什么它不起作用。以下是我目前的计划:

package gradeprojector;

    //Done

    // Print a welcome message
    // printWelcomeMessage();
    // Get the number of gradebook categories.
    // int categories = getGradebookCategories();
    // Get the maximum number of assignments in a category.
    // int maxAssignments = getMaximumAssignments();
    // Create the 2D array to hold assignment scores
    // double[][] scoreArray = getScoreArray(categories, maxAssignments);

    //Not Done

    // Get the category weights
    // getCategoryWeights(scoreArray);
    // Get the category scores
    // getScores(scoreArray);
    // Compute the category averages
    // computeCategoryAverages(scoreArray);
    // Compute the overall average
    // double overallAverage = computeOverallAverage(scoreArray);
    // Compute the final exam scores needed to get a certain grade (just do A,B,C,D)
    // double[] targetFinalScores = getTargetFinalScores(overallAverage);
    // Print target final exam scores
    // printTargetFinalExamScoes(targetFinalScores);

import java.util.*;
public class GradeProjector {

    public static void main(String[] args) {
        // TODO code application logic here
        printWelcomeMessage();
        int categories = getGradebookCategories();
        int maxAssignments = getMaximumAssignments();
        double[][] scoreArray = getScoreArray(categories, maxAssignments);
        printScoreArray(scoreArray, maxAssignments);
        scoreArray = getCategoryWeights(scoreArray);
        printScoreArray(scoreArray, maxAssignments);
    }

    // printWelcomeMessage();
    public static void printWelcomeMessage(){
        System.out.println("Welcome!");
    }

    // Get the number of gradebook categories.
    public static int getGradebookCategories(){
        Scanner in = new Scanner(System.in);
        System.out.print("Enter the number of gradebook categories: ");
        int categories = in.nextInt();
        return categories;
    }

    // Get the maximum number of assignments in a category.
    public static int getMaximumAssignments(){
        Scanner in = new Scanner(System.in);
        System.out.print("Enter the maximum number of assignments: ");
        int maxAssignments = in.nextInt();
        return maxAssignments;
    }

    // Create the 2D array to hold assignment scores
    public static double[][] getScoreArray(int categories, int maxAssignments){
        double[][] scoreArray = new double [categories] [maxAssignments+2];

        for(int i = 0; i < scoreArray.length; i++){
            for(int j = 0; j < scoreArray[i].length; j++){
                scoreArray[i][j] = -999;  
            }
        }
        return scoreArray;
    }

    public static void printScoreArray(double[][] scoreArray, int maxAssignments){
        System.out.println("");
        int compensate = -1;
        for(int i = 1; i<=scoreArray[0].length;i++ ) {
            if(i == scoreArray[0].length){
                System.out.print(" Average");
            }
            else if(i == 1)
                System.out.print("   Weight ");
            }         
            else{
                System.out.print(" Grade"+(i+compensate)+" ");
            }
        }
        System.out.println();
        if(maxAssignments == 1)
            System.out.println("  ------------------------");
        else if(maxAssignments == 2)
            System.out.println("  ---------------------------------");
        else if(maxAssignments == 3)
            System.out.println("  ----------------------------------------");
        else if(maxAssignments == 4)
            System.out.println("  ------------------------------------------------");
        else if(maxAssignments == 5)
            System.out.println("  --------------------------------------------------------");
        else if(maxAssignments == 6)
            System.out.println("  ----------------------------------------------------------------");
        else if(maxAssignments == 7)
            System.out.println("  ------------------------------------------------------------------------");
        else if(maxAssignments == 8)
            System.out.println("  --------------------------------------------------------------------------------");
        else if(maxAssignments == 9)
            System.out.println("  ----------------------------------------------------------------------------------------");
        else if(maxAssignments == 10)
            System.out.println("  -------------------------------------------------------------------------------------------------");
        else if(maxAssignments == 11)
            System.out.println("  ----------------------------------------------------------------------------------------------------------");
        else if(maxAssignments >= 12)
            System.out.println("  -------------------------------------------------------------------------------------------------------------------");

        for(int i = 0; i < scoreArray.length; i++){
            for(int j = 0; j < scoreArray[i].length; j++){
                double tempDouble = scoreArray[i][j];
                if(j==0){
                    System.out.format("%1d| ",i+1);
                    System.out.print(tempDouble+"  ");
                }
                else{
                    System.out.print(tempDouble+"  ");
                }

            }
            System.out.println();
        }
    }

    // Get the category weights
    public static double[][] getCategoryWeights(double[][] scoreArray){
        Scanner in = new Scanner(System.in);
        System.out.print("Enter the category weights: ");

        for(int i = 0; i < scoreArray.length; i++){
            for(int j = 0; j < scoreArray[i].length; j++){
                double temp = in.nextDouble();
                scoreArray[0][j] = temp;  
            }
        }
        return scoreArray;
    }
}
package;
//完成
//打印欢迎信息
//printWelcomeMessage();
//获取成绩册类别的数量。
//int categories=getGradebookCategories();
//获取类别中的最大分配数。
//int maxAssignments=getMaximumAssignments();
//创建二维数组以保存作业分数
//double[][]scoreArray=getScoreArray(类别、maxAssignments);
//未完成
//获取类别权重
//getCategoryWeights(scoreArray);
//获取类别分数
//getScores(scoreArray);
//计算类别平均值
//computeCategoryAverages(scoreArray);
//计算总平均数
//double overallAverage=计算overallAverage(scoreArray);
//计算获得某个分数所需的期末考试分数(只需做a、B、C、D)
//double[]targetFinalScores=getTargetFinalScores(总体平均值);
//打印目标期末考试成绩
//打印targetfinalxamscoes(targetFinalScores);
导入java.util.*;
公共班级放映机{
公共静态void main(字符串[]args){
//此处的TODO代码应用程序逻辑
printWelcomeMessage();
int categories=getGradebookCategories();
int maxAssignments=getMaximumAssignments();
double[][]scoreArray=getScoreArray(类别、maxAssignments);
printScoreArray(scoreArray,maxAssignments);
scoreArray=getCategoryWeights(scoreArray);
printScoreArray(scoreArray,maxAssignments);
}
//printWelcomeMessage();
公共静态无效printWelcomeMessage(){
System.out.println(“欢迎!”);
}
//获取成绩册类别的数量。
公共静态整型getGradebookCategories(){
扫描仪输入=新扫描仪(系统输入);
System.out.print(“输入成绩册类别的数量:”);
int categories=in.nextInt();
退货类别;
}
//获取类别中的最大分配数。
公共静态int getMaximumAssignments(){
扫描仪输入=新扫描仪(系统输入);
System.out.print(“输入最大分配数:”);
int maxAssignments=in.nextInt();
返回maxAssignments;
}
//创建二维数组以保存作业分数
公共静态双[][]getScoreArray(int类别,int maxAssignments){
double[]scoreArray=新的双[类别][maxAssignments+2];
for(int i=0;i
正如mdnghtblue的评论所说,也要改变它

for(int i = 0; i < scoreArray.length; i++){
     for(int j = 0; j < scoreArray[i].length; j++){
         double temp = in.nextDouble();
         scoreArray[i][j] = temp;  
     }
 }

如果只想更改“权重”列的值,则应更改

 for(int i = 0; i < scoreArray.length; i++){
        //for(int j = 0; j < scoreArray[i].length; j++){
            double temp = in.nextDouble();
            scoreArray[i][0] = temp;  
        //}
    }
for(int i=0;i

这将只接受权重列的输入…

我刚刚解决了问题。感谢您的意见。将其更改为:

scoreArray[i][j] = temp
并将嵌套for循环更改为:

for(int j = 0; j < 1; j++){
for(int j=0;j<1;j++){
工作方法:

public static double[][] getCategoryWeights(double[][] scoreArray){
    Scanner in = new Scanner(System.in);
    System.out.print("Enter the category weights: ");

    for(int i = 0; i < scoreArray.length; i++){
        for(int j = 0; j < 1; j++){
            double temp = in.nextDouble();
            scoreArray[i][j] = temp;  
        }
    }
    return scoreArray;
}
publicstaticdouble[]getCategoryWeights(double[]scoreArray){
扫描仪输入=新扫描仪(系统输入);
System.out.print(“输入类别权重:”);
for(int i=0;i
双循环内部应
scoreArray[0][j]=temp;
scoreArray[i][j]=temp;
?这有助于填充2d数组,但我需要做的是首先填充第一列“权重”,然后填充每一行,显然跳过了刚刚填充的第一列。我提出的修复方法也很有效,但您的修复方法效率更高,代码更少。我现在意识到这是一个多么简单的错误,可能需要一些睡眠。感谢您的帮助。
public static double[][] getCategoryWeights(double[][] scoreArray){
    Scanner in = new Scanner(System.in);
    System.out.print("Enter the category weights: ");

    for(int i = 0; i < scoreArray.length; i++){
        for(int j = 0; j < 1; j++){
            double temp = in.nextDouble();
            scoreArray[i][j] = temp;  
        }
    }
    return scoreArray;
}