【问题标题】:Splitiing a string array into multiple subarrays in java based on prefix基于前缀将字符串数组拆分为java中的多个子数组
【发布时间】:2022-01-18 13:29:35
【问题描述】:

我有几个来自用户的字符串输入(学生的注册人数),我必须根据他们的学习年份将它们存储到不同的数组中并打印输出。 例如,如果字符串以“18”开头,我必须将其存储为四年级学生。如果它以“19”开头,我必须将其存储为三年级学生,依此类推。

    import java.util.Scanner;
public class reg {
    public static void main(String args[]){
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter no of students");
    int n = scan.nextInt();
    scan.nextLine();
    String[] arr = new String[n];
    System.out.println("Enter registration numbers");
    for(int i = 0;i<n;i++){
        arr[i]=scan.nextLine();

    }

    String[] arr1 = new String[n];
    String[] arr2 = new String[n];
    String[] arr3 = new String[n];
    String[] arr4 = new String[n];
    String[] arr5 = new String[n];


    for(int i = 0;i<n;i++){
        if(arr[i].startsWith("18")){
            for(int j = 0;j<n;j++){
                arr1[j] = arr[i];
            }
        }
        else if(arr[i].startsWith("19")){
            for(int j = 0;j<n;j++){
                arr2[j] = arr[i];
            }
        }
        else if(arr[i].startsWith("20")){
            for(int j = 0;j<n;j++){
                arr3[j] = arr[i];
            }
        }
        else if(arr[i].startsWith("21")){
            for(int j = 0;j<n;j++){
                arr4[j] = arr[i];
            }
        }
        else{
            for(int j = 0;j<n;j++){
                arr5[j] = arr[i];
            }
        }

    }
    System.out.println("4th year students are");
    for(int i = 0;i<n;i++){
        System.out.println(arr1[i]);
        System.out.println();
    }
    System.out.println("3rd year students are");
    for(int i = 0;i<n;i++){
        System.out.println(arr2[i]);
        System.out.println();
    }
    System.out.println("2nd year students are");
    for(int i = 0;i<n;i++){
        System.out.println(arr3[i]);
        System.out.println();
    }
    System.out.println("1st year students are");
    for(int i = 0;i<n;i++){
        System.out.println(arr4[i]);
        System.out.println();
    }

    }
    
}

我得到的输出只是与我的条件匹配的最后一个输入被打印 n 次(学生输入的数量)。

我该如何解决这个问题?

编辑:

输入和预期输出:

学生人数:

7

输入注册号:

20ABC123

19ABC111

18ABC000

18ABC001

21ABX144

20ABX000

19ABC099

预期输出: 四年级学生是

18ABC000

18ABC001

三年级学生

19ABC111

19ABC099

二年级学生

20ABC123

20ABX000

一年级学生

21ABX144

【问题讨论】:

  • 您是否有一些示例输入数据和预期结果可供测试?你做了什么调试?
  • 你认为for(int j = 0;j&lt;n;j++){ arr1[j] = arr[i]; } 是做什么的?
  • for(int j = 0;j
  • @Pshemo 该代码至少对我来说不可读,预期的输出部分不清楚。这是提问的方式吗?
  • @Vikas Acharya 我编辑了问题

标签: java arrays string


【解决方案1】:

您需要引入新的 5 个变量来跟踪每个类别中的学生总数,以便您可以将下一个学生放在类别中的下一个空位置。

Scanner scan = new Scanner(System.in);
System.out.println("Enter no of students");
int n = scan.nextInt();
scan.nextLine();
String[] arr = new String[n];
System.out.println("Enter registration numbers");
for(int i = 0;i<n;i++){
    arr[i]=scan.nextLine();

}

String[] arr1 = new String[n];
String[] arr2 = new String[n];
String[] arr3 = new String[n];
String[] arr4 = new String[n];
String[] arr5 = new String[n];
int studntFirstYear = 0;
int studntSecondYear = 0;
int studntThirdYear = 0;
int studntForthYear = 0;
int studntElse = 0;


for(int i = 0;i<n;i++){
    if(arr[i].startsWith("18")){
        arr1[studntForthYear] = arr[i];
        studntForthYear++;
    }
    else if(arr[i].startsWith("19")){
        arr2[studntThirdYear] = arr[i];
        studntThirdYear++;
    }
    else if(arr[i].startsWith("20")){
        arr3[studntSecondYear] = arr[i];
        studntSecondYear++;
    }
    else if(arr[i].startsWith("21")){
        arr4[studntFirstYear] = arr[i];
        studntFirstYear++;
    }
    else{
        arr5[studntElse] = arr[i];
        studntElse++;
        
    }

}
System.out.println("4th year students are");
for(int i = 0;i<studntForthYear;i++){
    System.out.println(arr1[i]);
    System.out.println();
}
System.out.println("3rd year students are");
for(int i = 0;i<studntThirdYear;i++){
    System.out.println(arr2[i]);
    System.out.println();
}
System.out.println("2nd year students are");
for(int i = 0;i<studntSecondYear;i++){
    System.out.println(arr3[i]);
    System.out.println();
}
System.out.println("1st year students are");
for(int i = 0;i<studntFirstYear;i++){
    System.out.println(arr4[i]);
    System.out.println();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    相关资源
    最近更新 更多