黑马程序员技术交流社区

标题: 代码问题 [打印本页]

作者: 小七的    时间: 2015-3-13 20:52
标题: 代码问题
各位大神帮帮忙,到底哪里出了错误,就是运行不粗来

  1. package _02键盘接收字符翻转输出;

  2. import java.util.Scanner;
  3. /*
  4. * 编写程序,从键盘接收一个字符串,对字符串中的字母进行大小写互转(大写字母转成小写,小写字母转成大写)。
  5. */
  6. public class Test2 {
  7.         public static void main(String[] args) {
  8.                 Scanner sc = new Scanner(System.in);
  9.                 String str = sc.nextLine();
  10.                 String str1 = covert(str);
  11.                 System.out.println(str1);
  12.         }
  13.         public static String covert(String inputStr){
  14.                 char[] arr = new char[inputStr.length()];
  15.                 for(int i = 0 ; i < inputStr.length();i++){
  16.                         int ascii = (int)inputStr.charAt(i);
  17.                         if(ascii >= 65){
  18.                                 arr[i] = (char)(ascii + 32);
  19.                         }else if(ascii >= 96){
  20.                                 arr[i] = (char)(ascii -32);
  21.                         }
  22.                 }return String.valueOf(arr);
  23.         }
  24. }
复制代码


作者: 小七的    时间: 2015-3-13 20:54

运行出来的结果就是这个样子的
作者: z1342802487    时间: 2015-3-13 21:22
很高兴回答你的问题!你的代码问题出在if语句条件判断上,既然判断的都是字母,只需判断“ascii >96”就行了,大于96是小写ascii-32就是大写;else就是大写,加32就是小写
下面是我改好的代码
  1. package _02键盘接收字符翻转输出;

  2. import java.util.Scanner;

  3. /*
  4. * 编写程序,从键盘接收一个字符串,对字符串中的字母进行大小写互转(大写字母转成小写,小写字母转成大写)。
  5. */
  6. public class Test2
  7.         {
  8.                 public static void main(String[] args)
  9.                         {
  10.                                 Scanner sc = new Scanner(System.in);
  11.                                 String str = sc.nextLine();
  12.                                 String str1 = covert(str);
  13.                                 System.out.println(str1);
  14.                         }

  15.                 public static String covert(String inputStr)
  16.                         {
  17.                                 char[] arr = new char[inputStr.length()];
  18.                                 for (int i = 0; i < inputStr.length(); i++)
  19.                                         {
  20.                                                 int ascii = (int) inputStr.charAt(i);
  21.                                                 if (ascii >96)
  22.                                                         {
  23.                                                                 arr[i] = (char) (ascii-32);
  24.                                                         } else
  25.                                                         {
  26.                                                                 arr[i] = (char) (ascii + 32);
  27.                                                         }
  28.                                         }
  29.                                 return String.valueOf(arr);
  30.                         }
  31.         }
复制代码
学习愉快!



作者: ankje    时间: 2015-3-13 21:54
小七的 发表于 2015-3-13 20:54
运行出来的结果就是这个样子的

把判断语句改成这样就OK了
  1. if (ascii >= 65 && ascii <= 90) {
  2.                                 arr[i] = (char) (ascii + 32);
  3.                         } else if (ascii >= 97 && ascii <= 122) {
  4.                                 arr[i] = (char) (ascii - 32);
  5.                         } else {
  6.                                 arr[i] = inputStr.charAt(i);
  7.                         }
复制代码

作者: 小七的    时间: 2015-3-13 22:26
ankje 发表于 2015-3-13 21:54
把判断语句改成这样就OK了

果然OK,不过这样我知道,,你看这段代码。
  1. public static String convert(String inputStr) {
  2.         //定义一个数组容器
  3.         char[] arr = new char[inputStr.length()];

  4.         for(int i=0;i<inputStr.length();i++){
  5.                 //得到字母对应的ascii码
  6.             int ascii = (int)inputStr.charAt(i);
  7.                    //小写
  8.                if(ascii>=97){
  9.               arr[i] = (char)(ascii-32);
  10.             //大写
  11.                    }else if(ascii>=65){

  12.                      arr[i] = (char)(ascii+32);

  13.                     }
  14.         }
  15.     return String.valueOf(arr);

  16. }
复制代码

我的和这段的一样,但是我的就运行不出来,而这段代码就能运行出来,我就一直不知道哪里出问题了
作者: 小七的    时间: 2015-3-13 22:28
陶维琦 发表于 2015-3-13 21:14
将if和else if 内容调换就对了

还是不对~~~
作者: ankje    时间: 2015-3-14 13:40
小七的 发表于 2015-3-13 22:26
果然OK,不过这样我知道,,你看这段代码。

我的和这段的一样,但是我的就运行不出来,而这段代码就能运 ...

逻辑问题。

大于97的也大于65的,所以你把大于65的放在前面,大于97的也会通过。




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