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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄诗宾 高级黑马   /  2013-2-27 11:23  /  2992 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


编写程序,统计出字符串“want you to know one thing”中字母n和字母o的出现次数。
我是这么写的:
============================================
class CheckStr{
  private String str ;
  private String item ;
  public CheckStr(String s, String i){
      this.setStr(s) ;
      this.setItem(i) ;
  }
  public void setStr(String s){
    str = s ;
  }
  public void setItem(String i){
    item = i ;
  }
  public String getStr(){
    return str ;
  }
  public String getItem(){
    return item ;
  }
  public int getNum(){
    int j = 0 ;
    char c[] = str.toCharArray() ;
    for(int i = 0; i<c.length; i++ ){
      if(c.equals(item)){
        j++ ;
      }

    }
    return j ;
  }
}
public class CheckTheChar{
  public static void main(String args[]){
    CheckStr cs = new CheckStr("want you to know one thing", "n") ;
    CheckStr cs1 = new CheckStr("want you to know one thing", "o") ;
    System.out.println(cs.getNum()) ;
    System.out.println(cs1.getNum()) ;
  }
}===========================================
编译出错,提示:无法取消引用 char
不清楚是怎么回事,求解。

8 个回复

倒序浏览
亲, if(c.equals(item))这句是有问题的,永远是false
你把代码改成
  1. class CheckStr{
  2.           private String str ;
  3.           private char item ;
  4.           public CheckStr(String s, char i){
  5.               this.setStr(s) ;
  6.               this.setItem(i) ;
  7.           }
  8.           public void setStr(String s){
  9.             str = s ;
  10.           }
  11.           public void setItem(char i){
  12.                   item = i ;
  13.           }
  14.           public String getStr(){
  15.             return str ;
  16.           }
  17.           public char getItem(){
  18.             return item ;
  19.           }
  20.           public int getNum(){
  21.             int j = 0 ;
  22.             char c[] = str.toCharArray() ;
  23.             for(int i = 0; i<c.length; i++ ){
  24.               if(c[i]==item){
  25.                 j++ ;
  26.               }

  27.             }
  28.             return j ;
  29.           }
  30.         }
  31.         public class CheckTheChar{
  32.           public static void main(String args[]){
  33.             CheckStr cs = new CheckStr("want you to know one thing", 'n') ;
  34.             CheckStr cs1 = new CheckStr("want you to know one thing", 'o') ;
  35.             System.out.println(cs.getNum()) ;
  36.             System.out.println(cs1.getNum()) ;
  37.           }
  38.         }
复制代码
回复 使用道具 举报
private String str ;
  private String item ;
你定义的两个内部成员都是String 类型的.
if(c.equals(item)) //以是字符.item是字符串
而你用来比较的的是字符数组c
类型不一样.所以出错.你改成两个成员改成char类型就行了.
回复 使用道具 举报
char和String不能用equals相比较,因为类型不同。

修改后的程序:
class CheckStr{
  private String str ;
  private char key;
  public CheckStr(String str, char key){
      this.setStr(str);
      this.setKey(key);
  }
  
  public String getStr() {
        return str;
}

public void setStr(String str) {
        this.str = str;
}

public char getKey() {
        return key;
}

public void setKey(char key) {
        this.key = key;
}

public int getNum(){
    int count = 0 ;
    char arr[] = str.toCharArray() ;
    for(int i = 0; i < arr.length; i++ ){
      if(arr[i] == key){
        count++ ;
      }

    }
    return count ;
  }
}
public class CheckTheChar{
  public static void main(String args[]){
    CheckStr cs = new CheckStr("want you to know one thing", 'n') ;
    CheckStr cs1 = new CheckStr("want you to know one thing", 'o') ;
    System.out.println(cs.getNum()) ;
    System.out.println(cs1.getNum()) ;
  }
}

回复 使用道具 举报
我帮你修改一下代码吧
  1. class CheckStr {
  2.         private String str;
  3.         private String item;

  4.         public CheckStr(String s, String i) {
  5.                 this.setStr(s);
  6.                 this.setItem(i);
  7.         }

  8.         public void setStr(String s) {
  9.                 str = s;
  10.         }

  11.         public void setItem(String i) {
  12.                 item = i;
  13.         }

  14.         public String getStr() {                //我不知道你定义这个方法有什么用
  15.                 return str;
  16.         }

  17.         public String getItem() {                //我不知道你定义这个方法有什么用
  18.                 return item;
  19.         }

  20.         public int getNum() {
  21.                 int j = 0;
  22.                 char c[] = str.toCharArray();
  23.                 for (int i = 0; i < c.length; i++) {
  24.                         if ((c[i] + "").equals(item)) {                //c[i]是基础数据类型,不支持equals方法,得先将其变为String对象才行
  25.                                 j++;
  26.                         }

  27.                 }
  28.                 return j;
  29.         }
  30. }

  31. public class CheckTheChar {
  32.         public static void main(String args[]) {
  33.                 CheckStr cs = new CheckStr("want you to know one thing", "n");
  34.                 CheckStr cs1 = new CheckStr("want you to know one thing", "o");
  35.                 System.out.println(cs.getNum());
  36.                 System.out.println(cs1.getNum());
  37.         }
  38. }
复制代码
回复 使用道具 举报
本帖最后由 陈圳 于 2013-2-27 11:55 编辑

改了之后,运行还是出错 基本数据类型不具备比较性,可以比较的是他的封装类Charactor
你的这一句本身就有错:f(c.equals(item))  //c是字符数组,必须用角标来比较c
我改了一下,你看下
  1. package Day17;
  2. class CheckStr{
  3.           private String str ;
  4.           private char item ;
  5.           public CheckStr(String s, char i){
  6.               this.setStr(s) ;
  7.               this.setItem(i) ;
  8.           }
  9.           public void setStr(String s){
  10.             str = s ;
  11.           }
  12.           public void setItem(char i){
  13.             item = i ;
  14.           }
  15.           public String getStr(){
  16.             return str ;
  17.           }
  18.           public char getItem(){
  19.             return item ;
  20.           }
  21.           public int getNum(){
  22.             int j = 0 ;
  23.             char c[] = str.toCharArray() ;
  24.             for(int i = 0; i<c.length; i++ ){
  25.               if(c[i]==item){
  26.                 j++ ;
  27.               }

  28.             }
  29.             return j ;
  30.           }
  31.         }
  32.         public class Test2{
  33.           public static void main(String args[]){
  34.             CheckStr cs = new CheckStr("want you to know one thing", 'n') ;
  35.             CheckStr cs1 = new CheckStr("want you to know one thing", 'o') ;
  36.             System.out.println(cs.getNum()) ;
  37.             System.out.println(cs1.getNum()) ;
  38.           }
  39.         }
复制代码
回复 使用道具 举报
王钊 中级黑马 2013-2-27 12:01:56
7#
修改一处代码即可:
  1. public int getNum()
  2.         {
  3.                 int j = 0;
  4.                 char c[] = str.toCharArray();
  5.                 for (int i = 0; i < c.length; i++)
  6.                 {
  7.                         if (String.valueOf(c[i]).equals(item))
  8.                         {
  9.                                 j++;
  10.                         }

  11.                 }
  12.                 return j;
  13.         }
复制代码
因为str.toCharArray()后,都变成字符型的了,字符型要和单个字符的字符串比较,要先把字符转换成字符串,
转换字符串有很多种方法,String.valueOf(Char c)是其中一种。
回复 使用道具 举报
横创 中级黑马 2015-8-18 22:39:07
8#
dou shi  da niu
回复 使用道具 举报
类型不一样.所以出错.你改成两个成员改成char类型就行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马