Java 使用扫描仪输入写入二维数组值
我在编写getCategoryWeights方法时遇到了困难(在代码的底部)。它应该根据用户的输入更改权重列的值,但我不明白为什么它不起作用。以下是我目前的计划: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 =
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;
}