通过使用循环访问每个索引将字符串数组转换为整数数组

Converting String Array into Integer Array by accessing each indexes using loop

下面是我的示例代码。我正在尝试将 gradeString 转换为 gradeInt,但似乎无法正确完成。当我最后使用 toString.

打印 gradeInt 的值时

上面写着一个空白数组,就像这样:[ ]

感谢您的帮助!

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
    }
}

试试这个。问题是您在输入任何数据之前分配数组的大小等。实际上根本不需要使用 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
}

我运行你的代码并且它有效

输出:

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

如果您得到一个空数组,我怀疑您的代码的其他部分可能存在错误。

您 运行 代码的上下文是什么?如果您粘贴其余代码,可能有助于找到错误的真正来源。

解决方案:

就像安迪提到的那样。根本错误包含在这里:

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

您在运行时定义此变量并为其分配与 gradeArr 相同的长度,当时为 0。

这会导致 convert() 方法中发生逻辑错误。

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

如果 i 小于长度为 0 的 gradeInt,你告诉代码循环。基本上它从不循环。它只是完全跳过循环。

解决此问题的最快方法是像这样修改代码:

不要在运行时为 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();
}

在您为 "quick fix" 调用 convert 之前添加此行:

gradeInt = new int[gradeArr.length];