阵列打印不正确

Array not printing properly

为什么数组 "prevScore" 不打印值 "points"?

我希望它打印出 prevScore [0] 的分数,然后是 null 0

这是数组,在 // 之后是我认为我可以使用的东西。

int [] prevScore = new int[10]; //{ 0 };

String [] prevScoreName = new String[10]; //{"John Doe"};

public static int[] scoreChange (int prevScore[], int points)
{
     for(int i = 9; i > 0; i--){
     prevScore[i] = prevScore[i-1];
     }
     prevScore[0]= points;

     return prevScore;
}

不知道是否需要打印prevScore。

//a method that prints high scores
public static void printScores (int prevScore[], String prevScoreName[])  
    {
         for (int i = 10; i > 0; i--){
            System.out.println(prevScore[i] + " " + prevScoreName[i]);
          }
 }

这是我正在处理的程序的其余部分...目前我只有一个,0 John Doe。

 public class Main

{
static BufferedReader br = new BufferedReader (new InputStreamReader (System.in)); // user input


public static void main (String args[]) throws IOException
 {
   int press = 0;

    do   {
       int menuchoice = 0;
       int [] prevScore = new int[] { 0 };

       String [] prevScoreName = new String[] {"John Doe"};


   System.out.println("Menu choice: 1 to start game, 2  print instructions,"
                + "3 prev score");
   Scanner input = new Scanner(System.in);
   int userinput = Integer.parseInt(input.next());

   int points;
   menuchoice = userinput;

       if (menuchoice == 1){
       points = startGame();
       String newName = endGame(points);
       prevScore = scoreChange(prevScore,points);
       prevScoreName = nameChange(prevScoreName, newName);
        }
        if (menuchoice == 2){
        printInstructions();
        }
        if(menuchoice == 3) {
       printScores(prevScore, prevScoreName); }
        if (menuchoice != 1 && menuchoice != 2 && menuchoice !=3 ) {
       System.out.println("ERROR"); }

    } while (press !=4 );
} 

//a method that initializes a new game
public static int startGame () throws IOException //a method that initializes a new game
{

    int lives = 3;
    int points = 0;

    System.out.println("Good Luck!");

do {

    System.out.println("Points: " + points);
    System.out.println("Lives: " + lives);

    int correct = displayNewQuestion();

    Scanner userinput = new Scanner(System.in);
    int userAnswer = Integer.parseInt(userinput.nextLine());

    if (userAnswer == correct){
        points ++;
        System.out.println("Correct");
    }
    if (userAnswer != correct ){
        lives --;
        System.out.println("Incorrect");
    }
} while (lives > 0);

    return points;
}

public static String endGame (int points) throws IOException // a method that tells the user the game is over
{
System.out.println("GAME OVER");

    Scanner nameinput = new Scanner(System.in);
    System.out.println("Please enter your name for the score charts!");
    String newName = nameinput.next();

return newName;
}

public static int[] scoreChange (int prevScore[], int points)
{
// for(int i = 0; i < 10; i--){
      //  prevScore[i] = prevScore[i-1];
   // }
    // prevScore[1]= prevScore[0];
     prevScore[0]= points;

    return prevScore;
}

public static String[] nameChange (String prevScoreName[], String newName)
{

    /*for(int i = 0; i < 10; i++){
        prevScoreName[i] = prevScoreName[i-1];
    }
    //prevScoreName[1] = prevScoreName[0];*/
    prevScoreName[0] = newName;

    return prevScoreName;

 }
public static void printInstructions ()  //a method that will print the instructions to the user
{
System.out.println("Instructions");
}


public static void printScores (int prevScore[], String prevScoreName[])  //a method that prints high scores
{

  /*  for (int i = 0; i < 10; i--){
    System.out.println(prevScore[i] + " " + prevScoreName[i]);
   }*/

     for (int i = prevScore.length; i > 0; i--){
     System.out.println(prevScore[i-1] + " " + prevScoreName[i-1]);

    }
 }
public static int displayNewQuestion ()  // a method that displays a random arithmetic question
{
    int  correctAnswer = 0;

    int num1 = randInt (12,-12);
    int num2 = randInt(12, -12);

    Random rand = new Random();
    int operator = rand.nextInt((4 - 1) + 1) + 1;

    if (operator == 1)
    {
        System.out.println(num1 + " + " + num2);
        correctAnswer = num1 + num2;
    }
    if (operator == 2)
    {
        System.out.println(num1 + " - " + num2);
        correctAnswer= num1 - num2;
    }
    if (operator == 3)
    {
        System.out.println(num1 + " x " + num2);
        correctAnswer= num1*num2;
    }
    if (operator == 4)
    {
        if (num2 == 0) {
        System.out.println(num1*num2 + " / " + num1);
        correctAnswer= ((num1*num2)/num1);
        }
        if (num2 != 0) {
        System.out.println(num1*num2 + " / " + num2);
        correctAnswer= ((num1*num2)/num2);
    }
    }

    return correctAnswer;
}

public static int randInt(int max , int min) {

Random rand = new Random();
min = -12;
max = 12;

int randnum = rand.nextInt((max - min) + 1) + min;

return randnum;



}

}

使用这个循环:

 for (int i = prevScore.length; i > 0; i--){
    System.out.println(prevScore[i-1] + " " + prevScoreName[i-1]);

}

我想应该可以解决你的问题。

更新

基于您更新的程序。将以下代码移至 'do' 循环开头上方。

    int [] prevScore = new int[] { 0 };

   String [] prevScoreName = new String[] {"John Doe"};

也就是说,您正在将这些行移出循环。它现在应该可以工作了。

那是你的 'main' 方法的开始应该看起来像这样:

 public static void main(String args[]) throws IOException {
        int press = 0;
        int[] prevScore = new int[] { 0 };

        String[] prevScoreName = new String[] { "John Doe" };
        do {
            int menuchoice = 0;

            System.out.println("Menu choice: 1 to start game, 2  print instructions," + "3 prev score");

您的 printScore() 方法试图访问索引范围为 0 - 9 的数组的元素 [10],但从未访问元素 [0]。您可能想先打印最近的分数:

for (int i = 0; i < 10; i++) {

或者反过来,最后打印最近的分数:

for (int i = 9; i >= 0; i--) {

非常感谢!有用!唯一的问题仍然是得分列表向后打印。

public class Main
{
    static BufferedReader br = new BufferedReader (new InputStreamReader (System.in)); // user input

    public static void main (String args[]) throws IOException
    {
        int press = 0;
        int[] prevScore = new int[10];

        String[] prevScoreName = new String[10];
        do {
            int menuchoice = 0;

            System.out.println("Menu choice: 1 to start game, 2  print instructions,"
                    + "3 prev score");
            Scanner input = new Scanner(System.in);
            int userinput = Integer.parseInt(input.next());

            int points;
            menuchoice = userinput;

            if (menuchoice == 1) {
                points = startGame();
                String newName = endGame(points);
                prevScore = scoreChange(prevScore,points);
                prevScoreName = nameChange(prevScoreName, newName);
            }
            if (menuchoice == 2) {
                printInstructions();
            }
            if(menuchoice == 3) {
                printScores(prevScore, prevScoreName);
            }
            if (menuchoice != 1 && menuchoice != 2 && menuchoice !=3 ) {
                System.out.println("ERROR");
            }
        } while (press !=4 );
    }

    //a method that initializes a new game
    public static int startGame () throws IOException //a method that initializes a new game
    {

        int lives = 3;
        int points = 0;

        System.out.println("Good Luck!");

        do {

            System.out.println("Points: " + points);
            System.out.println("Lives: " + lives);

            int correct = displayNewQuestion();

            Scanner userinput = new Scanner(System.in);
            int userAnswer = Integer.parseInt(userinput.nextLine());

            if (userAnswer == correct) {
                points ++;
                System.out.println("Correct");
            }
            if (userAnswer != correct ) {
                lives --;
                System.out.println("Incorrect");
            }
        } while (lives > 0);

        return points;
    }

    public static String endGame (int points) throws IOException // a method that tells the user the game is over
    {
        System.out.println("GAME OVER");

        Scanner nameinput = new Scanner(System.in);
        System.out.println("Please enter your name for the score charts!");
        String newName = nameinput.next();

        return newName;
    }

    public static int[] scoreChange (int prevScore[], int points)
    {
        // for(int i = 0; i < 10; i--){
        //     prevScore[i] = prevScore[i-1];
        // }
        // prevScore[1]= prevScore[0];
        prevScore[0]= points;

        return prevScore;
    }

    public static String[] nameChange (String prevScoreName[], String newName)
    {

        /*for(int i = 0; i < 10; i++){
            prevScoreName[i] = prevScoreName[i-1];
        }
        //prevScoreName[1] = prevScoreName[0];*/
        prevScoreName[0] = newName;

        return prevScoreName;
    }

    public static void printInstructions ()  //a method that will print the instructions to the user
    {
        System.out.println("Instructions");
    }

    public static void printScores (int prevScore[], String prevScoreName[])  //a method that prints high scores
    {

      /*  for (int i = 0; i < 10; i--){
        System.out.println(prevScore[i] + " " + prevScoreName[i]);
       }*/
         System.out.println("Scores: ");
         for (int i = prevScore.length; i > 0; i--){
             System.out.println(prevScore[i-1] + " " + prevScoreName[i-1]);
         }
    }

    public static int displayNewQuestion ()  // a method that displays a random arithmetic question
    {
        int  correctAnswer = 0;

        int num1 = randInt (12,-12);
        int num2 = randInt(12, -12);

        Random rand = new Random();
        int operator = rand.nextInt((4 - 1) + 1) + 1;

        if (operator == 1)
        {
            System.out.println(num1 + " + " + num2);
            correctAnswer = num1 + num2;
        }
        if (operator == 2)
        {
            System.out.println(num1 + " - " + num2);
            correctAnswer= num1 - num2;
        }
        if (operator == 3)
        {
            System.out.println(num1 + " x " + num2);
            correctAnswer= num1*num2;
        }
        if (operator == 4)
        {
            if (num2 == 0) {
                System.out.println(num1*num2 + " / " + num1);
                correctAnswer= ((num1*num2)/num1);
            }
            if (num2 != 0) {
                System.out.println(num1*num2 + " / " + num2);
                correctAnswer= ((num1*num2)/num2);
            }
        }

        return correctAnswer;
    }

    public static int randInt(int max , int min) {
        Random rand = new Random();
        min = -12;
        max = 12;

        int randnum = rand.nextInt((max - min) + 1) + min;

        return randnum;
    }
}