Everydayjava 整数数组初始化数据

Problem

【问题描述】

从标准输入读取一条符合C语言语法的整数数组定义语句,编程求得并输出该数组在定义完毕后的所有初始化数据。要求:
1、读入的数组定义语句符合标准C语言语法规则,并且数组是一维整数数组,不考虑其他情况。
2、数组定义语句中可能含有初始化数据。如果有初始化数据,则这些数据肯定有大括号包含;如果没有初始化数据,则没有大括号,并且输出时用大写字母N表示不确定的数据。
3、输出初始化数据时,按照下标由小到大的顺序输出。

【输入形式】

从控制台输入一字符串表示数组定义语句,在字符串末尾有一回车换行,输入的字符个数不超过100。

【输出形式】

在一行上按照下标由小到大的顺序输出数组的初始化数据,各数据之间用一个空格分隔,不确定的数据用大写字母N表示。

【输入样例1】

int  a[10 ] = { 2, 5239, 89 };

【输出样例1】

2 5239 89 0 0 0 0 0 0 0

【样例1说明】

定义的整数数组名为a,该数组长度为10,其中前三个元素分别初始化为2、5239和89,按照标准C语言语法规定,剩余的元素将自动初始化为0。

【输入样例2】

int  len[5];

【输出样例2】

N N N N N

【样例2说明】

定义的整数数组名为len,该数组长度为5,由于在定义时没有给出初始化数据,所以在该数组定义完后,其所有元素的数据都是不确定的。

【评分标准】

该题要求编程求得数组定义后的初始化数据。

简而言之就是读取输入数组的初始值:

import java.util.Scanner;

public class everydayjava {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine().trim();
        scanner.close();
        // 判断是否是整数数组定义语句
        if (isValidArrayDeclaration(input)) {
            // 提取数组名和长度
            String[] tokens = input.split("\\[|\\]");
            String arrayName = tokens[0].trim();
            int arrayLength = Integer.parseInt(tokens[1].trim());

            // 判断是否包含初始化数据
            if (input.contains("{")) {
                // 提取大括号内的初始化数据
                String initData = input.split("\\{")[1].split("\\}")[0].trim();
                String[] initDataArray = initData.split("\\s*,\\s*");
                printInitializedData(arrayName, arrayLength, initDataArray);
            } else {
                // 没有初始化数据,输出N
                printUninitializedData(arrayLength);
            }
        } else {
            System.out.println("无效输入!");
        }
    }

    // 判断是否是合法的整数数组定义语句
    private static boolean isValidArrayDeclaration(String input) {
        // 修改正则表达式
        return input.matches("^\\s*int\\s+[a-zA-Z_]\\w*\\s*\\[\\s*\\d+\\s*\\](\\s*=\\s*\\{.*\\})?\\s*;$");
    }

    // 输出初始化数据
    private static void printInitializedData(String arrayName, int arrayLength, String[] initDataArray) {
        int[] dataArray = new int[arrayLength];

        // 将初始化数据放入数组
        for (int i = 0; i < Math.min(initDataArray.length, arrayLength); i++) {
            dataArray[i] = Integer.parseInt(initDataArray[i].trim());
        }

        // 输出初始化数据,不足的部分用0填充
        for (int i = 0; i < arrayLength; i++) {
            System.out.print(dataArray[i] + " ");
        }
        System.out.println();
    }

    // 输出未初始化数据,用N代替
    private static void printUninitializedData(int arrayLength) {
        for (int i = 0; i < arrayLength; i++) {
            System.out.print("N ");
        }
        System.out.println();
    }
}

其中,trim用来字符串两端的空白字符

你可能感兴趣的:(数据结构,java,1024程序员节,开发语言)