Преобразование String Array в Integer Array путем обращения к каждому индексу с помощью цикла - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть пример кода ниже. Я пытаюсь преобразовать gradeString в gradeInt, и я не могу сделать это правильно. Когда я печатаю значение gradeInt в конце, используя toString.

Он говорит о пустом массиве, похожем на этот: []

Спасибо за помощь!

import java.util.*;

class testing{
    public static Scanner console = new Scanner(System.in);
    public static int studSize;
    public static String [] gradeArr = new String[studSize];
    public static int [] gradeInt = new int[gradeArr.length];

    public static void initialize(){
        System.out.print("Please enter student size: ");
        String studString = console.nextLine();
        studSize = Integer.parseInt(studString);
        enterData();
    }
    public static void enterData(){
        System.out.println("Enter student grades separated with dash(-)");
        System.out.print("Enter student grade/s: ");
        String gradeString = console.nextLine();
        gradeArr = gradeString.split("-");
        convert();
    }
    public static void convert(){
        for(int i=0; i<gradeInt.length; i++){
            gradeInt[i] = Integer.parseInt(gradeArr[i]);
        }
        print();
    }
    public static void print(){
        System.out.print(Arrays.toString(gradeArr));
        System.out.print(Arrays.toString(gradeInt));
    }
    public static void main(String [] args){
        initialize();
        //Main and Class Closing Braces
    }
}

Ответы [ 3 ]

1 голос
/ 12 февраля 2020

Добавьте эту строку непосредственно перед вашим звонком на convert для быстрого исправления:

gradeInt = new int[gradeArr.length];
0 голосов
/ 12 февраля 2020

Я запустил ваш код, и он работает

Вывод:

[95, 85, 75]
Process finished with exit code 0

Я подозреваю, что могут быть ошибки в других частях вашего кода, если вы получаете пустой массив.

В каком контексте вы запускаете код? Если вы вставите остальную часть кода, это может помочь найти реальный источник ошибки.

РЕШЕНИЕ:

Как упоминал Энди. Ошибка root содержится здесь:

public static int [] gradeInt = new int[gradeArr.length];

Вы определяете эту переменную во время выполнения и присваиваете ей ту же длину, что и gradeArr, равной 0 в то время.

Это приводит к ошибка logi c, возникающая в методе convert ().

    for(int i=0; i<gradeInt.length; i++){
        gradeInt[i] = Integer.parseInt(gradeArr[i]);
    }

Вы передаете код l oop, если я был меньше, чем gradeInt, который имеет длину 0. В основном это никогда петли. Он просто полностью пропускает l oop.

Самый быстрый способ исправить это - изменить код следующим образом:

Не назначайте длину переменной gradeInt во время выполнения. Измените строку следующим образом:

public static int [] gradeInt;

А затем измените свой метод enterData () следующим образом:

public static void enterData(){
    System.out.println("Enter student grades separated with dash(-)");
    System.out.print("Enter student grade/s: ");
    String gradeString = console.nextLine();
    gradeArr = gradeString.split("-");

    gradeInt = new int[gradeArr.length];
    convert();
}
0 голосов
/ 12 февраля 2020

Попробуйте это. Проблема заключается в том, что вы присваиваете размеры массивов et c до ввода каких-либо данных. На самом деле использование studSize вообще не нужно - см. Комментарии в коде

public static Scanner console = new Scanner(System.in);
public static int studSize;
public static String [] gradeArr;
public static int [] gradeInt;

public static void initialize(){

    // not needed - 
    System.out.print("Please enter student size: ");
    String studString = console.nextLine();

    // not needed 
    studSize = Integer.parseInt(studString);
    enterData();
}
public static void enterData(){
    System.out.println("Enter student grades separated with dash(-)");
    System.out.print("Enter student grade/s: ");
    String gradeString = console.nextLine();
    gradeArr = gradeString.split("-");
    convert();
}
public static void convert(){
    // set here as the size is know
    gradeInt = new int[gradeArr.length];

    for(int i=0; i<gradeArr.length; i++){
        // should be carefull of NumberFormatException
        gradeInt[i] = Integer.parseInt(gradeArr[i]);
    }
    print();
}
public static void print(){
    System.out.print(Arrays.toString(gradeInt));
}
public static void main(String [] args){
    initialize();
    //Main and Class Closing Braces
}
...