当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » Java  » 编程基础
wxxzy

一次面试题

wxxzy 发布于 2013年10月11日 10时, 40评/5176阅
分享到: 
收藏 +0
2
    昨天面试遇到一题,要求将输入的大写字母转成对应小写的后5个,如A转换后为f;如果转换后大于z则从a重新计,即多出1就转成a,多出2就转成b以此类推。

    虽然题目很简单,一般都会想到ASCII码转换,但是很久没注意这些细节了,每次遇到就习惯的查下,差点没写出来。看来基础有些东西还是要记住的。

    下面是我当时写的,勉强实现题目要求
标签: <无>

代码片段(1) [全屏查看所有代码]

1. [文件] uppertoLower.java ~ 635B     下载(25)     跳至 [1] [全屏预览]

package com.algorithm;

public class uppertoLower {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(uppertoLower('A'));
		System.out.println(uppertoLower('Z'));
	}
	
	public static Character uppertoLower(Character input) {
		char lower = 0;
		//判断输入是大写字母A-Z
		if(Character.valueOf(input)>='A' && Character.valueOf(input)<='Z'){
			//转化后大于z,则从a重新计
			if(Character.toLowerCase(input)+5>'z'){
				lower=(char) (Character.toLowerCase(input)+5-'z'+96);
			}else{
				lower=(char) (Character.toLowerCase(input)+5);
			}
		}
		return lower;
	}
}


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(40)

  • 1楼:优雅先生 发表于 2013-10-11 10:36 回复此评论
    其实我觉得效率最高的是查表,直接写死映射表。
  • 2楼:子矜 发表于 2013-10-11 10:52 回复此评论

    引用来自“七色鱼”的评论

    其实我觉得效率最高的是查表,直接写死映射表。
    Syso("请输入答案"); rtn 0;
  • 3楼:wxxzy 发表于 2013-10-11 11:37 回复此评论

    引用来自“七色鱼”的评论

    其实我觉得效率最高的是查表,直接写死映射表。
    面试就怎么简单怎么来了,根本没考虑效率
  • 4楼:徐林 发表于 2013-10-11 13:09 回复此评论
    96可以用‘a'-1代替吧。
  • 5楼:库特 发表于 2013-10-11 13:30 回复此评论
    特殊情况特殊对待,能超出的就那么几个字符,可以用一个map来储藏,其他照常,反而会好点
  • 6楼:augusttech 发表于 2013-10-11 13:48 回复此评论
    if ('A' > sour || 'Z' < sour) {
            return -1;
    }
    return  (char)((sour - 'A' + 5) % 26 + 'a');
  • 7楼:只为一诺 发表于 2013-10-11 15:26 回复此评论

    引用来自“augustsun”的评论

    if ('A' > sour || 'Z' < sour) {
            return -1;
    }
    return  (char)((sour - 'A' + 5) % 26 + 'a');
  • 8楼:wxxzy 发表于 2013-10-11 15:37 回复此评论

    引用来自“徐林”的评论

    96可以用‘a'-1代替吧。
    的确可以,当时真没想到
  • 9楼:wxxzy 发表于 2013-10-11 15:42 回复此评论

    引用来自“augustsun”的评论

    if ('A' > sour || 'Z' < sour) {
            return -1;
    }
    return  (char)((sour - 'A' + 5) % 26 + 'a');
  • 10楼:Tocy 发表于 2013-10-11 17:14 回复此评论
    这个记不住可以问面试官。。。
  • 11楼:miloming 发表于 2013-10-11 19:00 回复此评论
    public static void main(String[] args) {
            for (char c = 'A'; c <= 'Z'; c++) {
                System.out.println(uppertoLower(c, 5));             
            }
            System.out.println("-----"); 
            
            for (char c = 'A'; c <= 'Z'; c++) {           
                System.out.println(uppertoLower(c, -5));                 
            }
            System.out.println("-----"); 
            
            for (char c = 'A'; c <= 'Z'; c++) {            
                System.out.println(uppertoLower(c, 5*26+5));                    
            }
            System.out.println("-----"); 
            
            for (char c = 'A'; c <= 'Z'; c++) {           
                System.out.println(uppertoLower(c, -5*26-5));                 
            }
            System.out.println("-----");   
            
            for (char c = 'A'; c <= 'Z'; c++) {            
                System.out.println(uppertoLower(c, 1000));
            }
        }


        public static Character uppertoLower(Character sour, int offset) {
            if ('A' > sour || 'Z' < sour) {
                return '#';
            }
            final int length = ('Z' - 'A' + 1);
            return (char) ((sour - 'A' + offset % length + length) % length + 'a');
        }

  • 12楼:vivid 发表于 2013-10-12 09:54 回复此评论

    引用来自“augustsun”的评论

    if ('A' > sour || 'Z' < sour) {
            return -1;
    }
    return  (char)((sour - 'A' + 5) % 26 + 'a');
  • 13楼:王小祥 发表于 2013-10-12 11:04 回复此评论

    引用来自“augustsun”的评论

    if ('A' > sour || 'Z' < sour) {
            return -1;
    }
    return  (char)((sour - 'A' + 5) % 26 + 'a');
  • 14楼:kuangjunbiao 发表于 2013-10-12 12:01 回复此评论

    引用来自“augustsun”的评论

    if ('A' > sour || 'Z' < sour) {
            return -1;
    }
    return  (char)((sour - 'A' + 5) % 26 + 'a');
    高手
  • 15楼:蔡文超 发表于 2013-10-12 12:53 回复此评论

    引用来自“augustsun”的评论

    if ('A' > sour || 'Z' < sour) {
            return -1;
    }
    return  (char)((sour - 'A' + 5) % 26 + 'a');
    所见略同
  • 16楼:Altman 发表于 2013-10-12 19:25 回复此评论
    这种循环的我首先肯定想到取模...
  • 17楼:小隐隐于市 发表于 2013-10-13 22:12 回复此评论
    华为机试题
  • 18楼:wxxzy 发表于 2013-10-14 09:30 回复此评论

    引用来自“小隐隐于市”的评论

    华为机试题
    是的
  • 19楼:仁清烨媛 发表于 2013-10-14 11:18 回复此评论

    引用来自“augustsun”的评论

    if ('A' > sour || 'Z' < sour) {
            return -1;
    }
    return  (char)((sour - 'A' + 5) % 26 + 'a');
    能解释哈 这段代码不?
  • 20楼:augusttech 发表于 2013-10-14 12:50 回复此评论

    引用来自“仁清烨媛”的评论

    引用来自“augustsun”的评论

    if ('A' > sour || 'Z' < sour) {
            return -1;
    }
    return  (char)((sour - 'A' + 5) % 26 + 'a');
    能解释哈 这段代码不?
    假设输入'Z': 'Z' - 'A' = 25; 25 + 5 = 30; 30 % 26 = 4 (>字母总数26,要从头计数); 'a' + 4 = 'e';
开源从代码分享开始 分享代码
wxxzy的其它代码 全部(4)...