Java 尝试仅在2d数组中反转行中的数字,会导致错误和don';我不认为我做得对
我正在尝试做的只是反转每行中的数字,因此第[0]行的列将被反转,等等。我知道如何在线查看这两个行,但无法知道如何执行我需要它执行的操作。此外,它给了我一个空错误,我不明白为什么会发生这种情况,我的整个代码是:Java 尝试仅在2d数组中反转行中的数字,会导致错误和don';我不认为我做得对,java,arrays,loops,methods,reverse,Java,Arrays,Loops,Methods,Reverse,我正在尝试做的只是反转每行中的数字,因此第[0]行的列将被反转,等等。我知道如何在线查看这两个行,但无法知道如何执行我需要它执行的操作。此外,它给了我一个空错误,我不明白为什么会发生这种情况,我的整个代码是: import java.util.*; import java.io.*; public class Proj5 { public static void main(String[] args)throws IOException{ Scanner s = new Scanner
import java.util.*;
import java.io.*;
public class Proj5 {
public static void main(String[] args)throws IOException{
Scanner s = new Scanner(System.in);
int [] quizKey = {1,1,2,2,1,1,3,2,4,1,3,5,4,1,2};
String [] userAnswers = new String[100];
String [] wid = new String[100];
int [][] userIndividualAnswers = new int[quizKey.length][userAnswers.length];
int [] numCorrect = new int[quizKey.length];
int max;
int min;
int lines=0;
readInText();
s = readInText();
while(s.hasNext()){
String line = s.nextLine();
String[] tokens = line.split(",");
wid[lines] = tokens[0];
userAnswers[lines] = tokens[1];
lines ++;
}// end while loop
Long[][] userAnswersInt = new Long[lines][quizKey.length];
numCorrect = gradeSingleQuiz(lines, quizKey, userAnswers, numCorrect, userAnswersInt);
double[] percentCorrect = new double[lines];
percentCorrect = percentCorrect(lines, numCorrect, quizKey);
char[] grades = new char[lines];
grades = grade(numCorrect, lines);
max=max(numCorrect);
min=min(numCorrect);
displayOutput(wid, lines, numCorrect, grades, percentCorrect);
averageScore(max, min, lines, percentCorrect);
}//end main
public static Scanner readInText()throws IOException{
Scanner inFile = new Scanner(new File("QuizScores.txt"));
return inFile;
}// end readInText
public static String[] userAnswers(String userAnswers[]){
return userAnswers;
}
public static int[] gradeSingleQuiz(int lines, int quizKey[], String userAnswers[], int numCorrect[], Long userAnswersInt[][]){
for (int j=0; j<lines; j++){
numCorrect[j]=0;
long[] ara = new long[quizKey.length];
ara [j] = Long.parseLong(userAnswers[j]);
for(int p=0; p<ara.length; p++){
System.out.println(p);
userAnswersInt[j][p]=ara[j]%10;
ara[j]=ara[j]/10;
}
int rows = userAnswersInt.length;
int cols = userAnswersInt[0].length;
long[][] userAnswersReverse = new long[rows][cols];
for(int q=rows-1; q>=0;q--){
for(int w = cols-1; w >=0; w++){
userAnswersReverse[rows-1-q][cols-1-q] = userAnswersInt[q][w];
System.out.print(userAnswersReverse[q][w]);
}
}
for(int n=0; n<quizKey.length; n++){
System.out.println(userAnswersInt[j][n]);
if(userAnswersInt[j][n].equals(quizKey[n])){
numCorrect[j]++;
}
}
}//end for loop
return numCorrect;
}// end gradeSingleQuiz
public static int max(int numCorrect[]){
int max = numCorrect[0];
for(int r=1; r<numCorrect.length; r++){
if(numCorrect[r]>max){
max=numCorrect[r];
}
}
return max;
}
public static int min(int numCorrect[]){
int min = numCorrect[0];
for(int r=1; r<numCorrect.length; r++){
if(numCorrect[r]<min){
min=numCorrect[r];
}
}
return min;
}
public static char[] grade(int numCorrect[], int lines){
char[] grade = new char[lines];
for (int j=0; j<lines; j++){
if(numCorrect[j]>=14)
grade[j]='A';
else if((numCorrect[j]>=12)&&(numCorrect[j]<14))
grade[j]='B';
else if((numCorrect[j]>=11)&&(numCorrect[j]<12))
grade[j]='C';
else if ((numCorrect[j]>=9)&&(numCorrect[j]<11))
grade[j]='D';
else
grade[j]='F';
}
return grade;
}//end grade
public static double[] percentCorrect(int lines, int numCorrect[], int quizKey[]){
double[] centCorrect = new double[100];
for (int j=0; j<=lines; j++){
centCorrect[j] = numCorrect[j]/quizKey.length;
}
return centCorrect;
}
public static void averageScore(int min, int max, int lines, double percentCorrect[]){
double add=0;
for(int d=0; d<=lines; d++){
add = percentCorrect[d] + add;
}//end for loop
System.out.println("Average: " + add + "%");
System.out.println("High Score: " + max);
System.out.println("Low Score: " + min);
}// end averageScore
public static void displayOutput(String wid[], int lines, int numCorrect[], char grades[], double percentCorrect[]){
System.out.println("Student ID # Correct %Correct Grade");
for(int i=0; i<lines; i++){
System.out.println(" " + wid[i] + " " + numCorrect[i] + " " +
(percentCorrect[i]) + "%" + " " + grades[i]);
}
}// end display output
}//end class
第65行是:
userAnswersReverse[rows-1-q][cols-1-q] = userAnswersInt[q][w];
希望这是足够的信息,你们可以帮助我,并提前感谢,如果我需要包括任何其他内容,请告诉我
编辑:
我从中提取的文件是:
4563123,112211324135412
2312311,222121324135211
2312345,112211324135421
5527687,212111313124412
7867567,111111111111111
这里有几个错误 导致NullPointerException的原因是您正在创建Long[]类型的数组。这里的条目默认为空。如果它是“long[][]”——小的“l”——它们将是0。这不会导致任何异常,但它可能仍然不能满足您的要求 数组中的某些项在函数的第6-11行初始化,但仅在第一行初始化,然后在导致问题的行中使用一个未初始化的空值 也许循环结构意味着不同,因此在开始反转之前,第6-11行上的代码应用于所有行和所有列 您可能需要考虑的其他一些事项:
userAnswersReverse[rows-1-q][cols-1-q] = userAnswersInt[q][w];
您可能希望在赋值的两侧使用“w”而不是“q”作为列索引
此外,如果您试图反转行中的值,而不是交换行的顺序,那么行的索引在两侧是否应该相同
另一个问题是:
for(int w = cols-1; w >=0; w++){
看来你是在往上数,而不是往下数。谢谢你,我想我修正了很多,我会马上在编辑中发布我修改过的内容,但是你会建议我做什么呢?考虑到长期的情况,我需要长一点,因为原始数字串的长度问题不长,这就是“长”和“长”之间的微妙区别。“Long”是一种对象类型——您可以将其设置为“null”(如果您试图使用它进行计算,那么您的程序将崩溃)。“long”是一个基本类型——您不能将其设置为“null”(因此不会得到NullPointerException),但您当然可以将其设置为错误的值。(“Long”实际上是“Long”的一种包装,因为有时您需要对象类型是有充分理由的。)程序中的问题只是在使用它们之前必须小心初始化值。啊,好吧,我明白您的意思了,我将每隔很长时间更改一次,我还添加了更新的代码,它非常接近于工作,我想,它只是不太在那里,你有什么建议吗
Student ID # Correct %Correct Grade
4563123 15 1.0% A
2312311 9 0.0% D
2312345 13 0.0% B
5527687 9 0.0% D
7867567 6 0.0% F
Average: 1.0%
High Score: 0
Low Score: 15
4563123,112211324135412
2312311,222121324135211
2312345,112211324135421
5527687,212111313124412
7867567,111111111111111
userAnswersReverse[rows-1-q][cols-1-q] = userAnswersInt[q][w];
for(int w = cols-1; w >=0; w++){