Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用数组和多种方法进行编码会给我带来错误,但无法找出原因_Java_Arrays_Loops_Methods_Split - Fatal编程技术网

Java 使用数组和多种方法进行编码会给我带来错误,但无法找出原因

Java 使用数组和多种方法进行编码会给我带来错误,但无法找出原因,java,arrays,loops,methods,split,Java,Arrays,Loops,Methods,Split,这是我的代码,我以为我把所有的东西都打印出来了: 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 []

这是我的代码,我以为我把所有的东西都打印出来了:

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
    int[][] userAnswersInt = new int[quizKey.length][lines];
    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);

    displayOutput(wid, lines, numCorrect, grades, 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[], int userAnswersInt[][]){
    for (int j=0; j<=lines; j++){
    numCorrect[j]=0;
        long[] ara = new long[lines];
        long[] abc = new long[lines];
        ara [j] = Long.parseLong(userAnswers[j]);
    for(int p=0; p<userAnswersInt.length; p++){
        abc [p] = ara[j]%10;
        ara[j] = userAnswersInt[j][p];

    }
    for(int n=0; n<=quizKey.length; n++){

        if(userAnswersInt[j][n]==(quizKey[n])){
                    numCorrect[j]++;    
            }
    }
    }//end for loop

return numCorrect;
}// end gradeSingleQuiz

public static int max(int max, int numCorrect[]){
    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 min, int numCorrect[]){
    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 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 + "%");
}// 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[0] + "    " + numCorrect[i] + "    " +
                (percentCorrect[i]) + "    " + grades[i]);  
    }

}// end display output

}//end class
我在想,也许我没有把那个数字的字符串转换成整数,但是现在回想起来,我想我已经转换了,我真的不知道这些错误是什么。根据eclipse,在编译之前,代码没有任何问题

我从中提取的文本是这样的

4563123,112211324135412
2312311,222121324135211
2312345,112211324135421
5527687,212111313124412
7867567,111111111111111
第一个数字是学生id,第二个数字是基于数字的答案;T=1 F=2 A=1 B=2等

提前谢谢

编辑:

将上面的代码更改为Long,并修复了这些错误,但现在在
abc[p]=ara[j]%10行给我一个越界异常5我知道这不是我的问题,但如果有人能告诉我为什么会这样,我将非常感激,我的印象是5不是不允许


再次感谢

112211324135412
不是一个整数,它显然超出了
整数范围(-2147483648和最大值2147483647(包括))
,请尝试改用
Long.parseLong(str)

    long[] ara = new long[lines];
    ara [j] = Long.parseLong(userAnswers[j]);

“112211324135412”=>你可以解析int这个字符串,int溢出。

你的数字太大了,需要用biginger来解析。好的,非常感谢这确实解决了问题,但是现在它给了我一个越界的异常,行
abc[p]=ara[j]%10
?我不完全确定如何解决这个问题,因为5不应该超出范围?@JosephMindrup,数组索引从
0
开始,我相信你的
是数组的总长度,所以你的for循环应该继续到
j
,而不是
j@permgener。我认为你是对的,我改变了它,但不幸的是这没有任何改变。仍然给我一个出界5,我知道我有五行,所以随着变化不让它去5,我想会解决它,但我没有
    long[] ara = new long[lines];
    ara [j] = Long.parseLong(userAnswers[j]);