A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小周务商 金牌黑马   /  2014-5-8 00:30  /  2046 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一哥们发给我的代码。他说这个功能这样子能实现。为什么我的实现不了。复制过来的都报错。我已经标出来了。
这个if里面的条件能判断成功吗?

import java.util.Scanner;
/*
* 编写程序,从键盘接收一个字符串,对字符串中的字母进行大小写互转(大写字母转成小写,小写字母转成大写)。
*/
public class StringDemo2 {
        public static void main(String[] args) {
                //TODO Auto-generated method stub
                System.out.println("请输入一段英文字母");
                Scanner sc =new Scanner(System.in);
               
                String str1 = sc.next();
                StringBuilder sb =new StringBuilder("");//操作字符串就用字符缓冲
                String temp ="";
                char[] ch =str1.toCharArray();//把它转成字符数组。
                for (int i = 0; i < ch.length; i++) {
                        if(ch>='a'&&ch<='z'){//这里报错。
                                 temp =""+ch;
                                sb.append(temp.toUpperCase());
                        }
                        if(ch>='A'&&ch<='Z'){//这里报错。
                                temp =""+ch;
                                sb.append(temp.toLowerCase());
                        }
                }
                System.out.println(sb);       
        }
}


9 个回复

倒序浏览
本帖最后由 NewDemo 于 2014-5-8 00:56 编辑

  1. 有错,把ch改成ch[i],估计是他忘了写
复制代码
运行后截图

  1. public static void main(String[] args) {
  2.                 // TODO Auto-generated method stub
  3.                 System.out.println("请输入一段英文字母");
  4.                 Scanner sc = new Scanner(System.in);

  5.                 String str1 = sc.next();
  6.                 char[] ch = str1.toCharArray();
  7.                 for (char c : ch) {
  8.                         if (c >= 'a' && c <= 'z') {
  9.                                 c = (char) (c - 32);
  10.                                 System.out.print(c);
  11.                         }
  12.                         if (c >= 'A' && c <= 'Z') {
  13.                                 c = (char) (c + 32);
  14.                                 System.out.print(c);
  15.                         }
  16.                 }
复制代码
将代码稍微优化一下,省去中间把字符变成字符串才能调用upperCase和lowerCase的局限


回复 使用道具 举报
NewDemo 发表于 2014-5-8 00:43
运行后截图

将代码稍微优化一下,省去中间把字符变成字符串才能调用upperCase和lowerCase的局限

嗯。谢谢了。
回复 使用道具 举报
import java.util.Scanner;
/*
* 编写程序,从键盘接收一个字符串,对字符串中的字母进行大小写互转(大写字母转成小写,小写字母转成大写)。
*/
public class Test {
        public static void main(String[] args) {
                //TODO Auto-generated method stub
                System.out.println("请输入一段英文字母");
                Scanner sc = new Scanner(System.in);

                String str1 = sc.next();
                StringBuilder sb =new StringBuilder("");//操作字符串就用字符缓冲
                String temp ="";
                char[] ch =str1.toCharArray();//把它转成字符数组。
                for (int i = 0; i < ch.length; i++) {
                        if(ch>='a'&&ch<='z'){   //改过的代码
                                 temp =""+ch;
                                sb.append(temp.toUpperCase());
                        }
                        if(ch>='A'&&ch<='Z'){   //改过的代码
                                temp =""+ch;
                                sb.append(temp.toLowerCase());
                        }
                }
                System.out.println(sb);        
        }
}

回复 使用道具 举报
我这样优化之后,为什么输出的是toString的那种哈杀值。而不是我想要的字母呢。输出那里应该再怎样更改?

public class StringDemo2 {
        public static void main(String[] args) {
                //TODO Auto-generated method stub
                System.out.println("请输入一段英文字母");
                Scanner sc =new Scanner(System.in);
               
                String str1 = sc.next();
               
                StringBuilder sb =new StringBuilder("");//操作字符串就用字符缓冲
                String temp ="";
                char[] ch =str1.toCharArray();//把它转成字符数组。
                for (int i = 0; i < ch.length; i++) {
                        if(Character.isLowerCase(ch[i])){
                                 temp =""+ch;
                                sb.append(temp.toUpperCase());
                        }
                        if(Character.isUpperCase(ch[i])){
                                temp =""+ch;
                                sb.append(temp.toLowerCase());
                        }       
                }
                System.out.println(sb);       
        }
}
回复 使用道具 举报
NewDemo 发表于 2014-5-8 00:43
运行后截图

将代码稍微优化一下,省去中间把字符变成字符串才能调用upperCase和lowerCase的局限

这个方法很好,我当时也想到了,主要是面试时老师不让看文档,我不记得ascii码码表,所以用了个字符串
回复 使用道具 举报
小周务商 发表于 2014-5-8 09:32
我这样优化之后,为什么输出的是toString的那种哈杀值。而不是我想要的字母呢。输出那里应该再怎样更改?

...

这样改输出的结果还是对的啊,:L

QQ图片20140508095753.jpg (8.2 KB, 下载次数: 116)

QQ图片20140508095753.jpg
回复 使用道具 举报
张耀扬 发表于 2014-5-8 09:58
这样改输出的结果还是对的啊,

真是奇怪了。我的输出不是这样的。[C@7D4991AD[C@7D4991AD[C@7D4991AD[C@7D4991AD[C@7D4991AD
回复 使用道具 举报
小周务商 发表于 2014-5-8 10:00
真是奇怪了。我的输出不是这样的。[C@7D4991AD[C@7D4991AD[C@7D4991AD[C@7D4991AD[C@7D4991AD ...

呃......那就不知道了
回复 使用道具 举报
终于找到原因了。问题还是出现在这了。应该改成这样的。
       
temp =""+ch[i];
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马