java面试题目。。急需

一、 形如Microsoft excel中的列标为A、B、C……Z、AA、AB……ZZ,并假设A列标对应的为excel的第0列;请用最简单快捷的方式实现以下功能:
1、 任意输入1个或2个字母的组合,查找出该单个字母或组合对应的为哪列(例如输入AA,则打印出为第26列)
2、 任意输入1个列数字,查找出该列对应的字母或字母组合,如果越界则打印出“输入列越界,请重新输入”;(例如输入26,则打印出AA)
注意:不可采用定义大数组的方式,即定义所有字母及组合的一个大数组

2个回答

写了下,代码不好看,但是可以用。



public class test{
    public static void main(String[] args){
        if(args.length<1){
            System.out.println("没有输入");
            return;
        }

        transform(args[0]);
    }

    public static void transform(String str){
        try{
            int num = Integer.parseInt(str);
            if(num > 26*26*25){
                System.out.println("输入列越界,请重新输入");
                return;
            }
            String text = "";
            int tmp = num / 26;
            if(tmp>0) text += (char)('A'+tmp-1);
            tmp = num % 26;
            text += (char)('A'+tmp);
            System.out.println(text);
        }catch(Exception e){
            String text = str.toUpperCase();
            if(text.length()>2 || text.length()<1){
                System.out.println("输入字符串不正确,请重新输入");
                return;
            }
            char[] chars = text.toCharArray();
            int num = 0;
            if(chars.length==1){
                num += chars[0]-'A';
            }else{
                num += chars[1]-'A';
                num += (chars[0]-'A'+1)*26;
            }
            System.out.println(num);
        }
    }
}

SoWeiYouXu
xiaozhuai7 if(num > 26*26*25){ 这行是+25 不是*25 打错了
接近 2 年之前 回复
 public class Test {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String val = scan.nextLine();
        new Test().test(val);
    }

    public void test(String val) {
        String result = "";
        if(val == null || val.length() == 0) {
            //非法参数
            System.out.println("非法参数");
            return;
        }

        if(Pattern.matches("^[0-9]+$", val)) {//数字
            int iVal = Integer.parseInt(val);
            final int maxIndex = 26 * 27 - 1;
            if(iVal > maxIndex) {
                //下标越界
                System.out.println("下标越界");
                return;
            } else {
                char high = (char) ((iVal / 26 - 1) + 'A');
                char low = (char) (iVal % 26 + 'A');
                result += high + "" + low;
            }
        } else if(Pattern.matches("^[a-zA-Z]{1,2}$", val)) {//字母A-Z,最多两位
            val = val.toUpperCase();
            char[] arr = val.toCharArray();
            int len = val.length();
            if(1 == len) {
                result += arr[0] - 'A';
            } else {
                int high = ((arr[0] - 'A') + 1) * 26;
                int low = arr[1] - 'A';
                result += high + low;
            }
        } else {
            //格式有误
            System.out.println("格式有误");
            return;
        }
        System.out.println("输入:" + val + ",结果:" + result);
    }
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!