Как мне скопировать int numStudents в Integer i? - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь скопировать numStudents int в i Integer, но они всегда остаются прежними.int не является объектом, поэтому я попытался сделать его целым, но безрезультатно.Как мне избежать этой справочной копии?

import java.util.Scanner;
public class passionProject2 {
    public static void main(String[] args) {

        Scanner scnr = new Scanner(System.in);
        Integer numStudents;


        System.out.println("Enter the amount of students in your class.");

        numStudents = scnr.nextBigInteger();
        String[] studentNames = new String[numStudents];

        System.out.println("Enter your students' full names.");

        Integer i = numStudents;
        while (i >=0) {
            i--;
                studentNames[i] = scnr.nextLine();
                System.out.println(i);
            }


        while (numStudents >=0)
        {
            numStudents--;
            System.out.println(numStudents);
            System.out.println(studentNames[numStudents]);
        }

        }

    }

numStudents слишком мал для второго, пока он работает, выдает сообщение об ошибке, которое говорит об исключении в потоке "main" java.lang.ArrayIndexOutOfBoundsException: Index -1за пределы длины 3 в passionProject2.main (passionProject2.java:19)

, потому что numStudents равен -1

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

В строке 16 Integer i = numStudents;значение numStudents копируется в переменную i.Ваше java.lang.ArrayIndexOutOfBoundsException происходит, потому что вам нужно использовать «>» вместо «> =» в вашем условии инструкций while;в последней итерации каждого цикла while вы вводите -1. ​​

import java.util.Scanner;
public class passionProject2 {
public static void main(String[] args) {

    Scanner scnr = new Scanner(System.in);
    Integer numStudents;


    System.out.println("Enter the amount of students in your class.");

    numStudents = scnr.nextBigInteger();
    String[] studentNames = new String[numStudents];

    System.out.println("Enter your students' full names.");

    Integer i = numStudents;
    while (i >0) {
        i--;
            studentNames[i] = scnr.nextLine();
            System.out.println(i);
        }


    while (numStudents >0)
    {
        numStudents--;
        System.out.println(numStudents);
        System.out.println(studentNames[numStudents]);
    }

    }

}
0 голосов
/ 24 сентября 2019

Все должно быть целым, а не целым числом.Использование Integer - ваша проблема, так как они являются полными объектами, и вы делаете их равными друг другу (т. Е. Указывающими на один и тот же объект).

Если все int, они не ссылаются друг на друга при изменении значения (известного как тип primitive)

С ArrayIndexOutOfBoundsException, потому что вы проверяете больше, чем AND равно (> = вместо просто>) так что вы получите -1, когда дойдете до последнего цикла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...