黑马程序员技术交流社区

标题: 这代码是不是对的啊? [打印本页]

作者: 小周务商    时间: 2014-5-8 00:30
标题: 这代码是不是对的啊?
一哥们发给我的代码。他说这个功能这样子能实现。为什么我的实现不了。复制过来的都报错。我已经标出来了。
这个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);       
        }
}



作者: NewDemo    时间: 2014-5-8 00:43
本帖最后由 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的局限



作者: 小周务商    时间: 2014-5-8 08:54
NewDemo 发表于 2014-5-8 00:43
运行后截图

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

嗯。谢谢了。
作者: 创造命运    时间: 2014-5-8 09:11
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);        
        }
}


作者: 小周务商    时间: 2014-5-8 09:32
我这样优化之后,为什么输出的是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);       
        }
}
作者: 张耀扬    时间: 2014-5-8 09:52
NewDemo 发表于 2014-5-8 00:43
运行后截图

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

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

...

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

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

QQ图片20140508095753.jpg

作者: 小周务商    时间: 2014-5-8 10:00
张耀扬 发表于 2014-5-8 09:58
这样改输出的结果还是对的啊,

真是奇怪了。我的输出不是这样的。[C@7D4991AD[C@7D4991AD[C@7D4991AD[C@7D4991AD[C@7D4991AD
作者: 张耀扬    时间: 2014-5-8 10:02
小周务商 发表于 2014-5-8 10:00
真是奇怪了。我的输出不是这样的。[C@7D4991AD[C@7D4991AD[C@7D4991AD[C@7D4991AD[C@7D4991AD ...

呃......那就不知道了
作者: 小周务商    时间: 2014-5-8 10:03
终于找到原因了。问题还是出现在这了。应该改成这样的。
       
temp =""+ch[i];





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2