【问题标题】:Char cannot be dereferenced? using compareToChar 不能被取消引用?使用比较
【发布时间】:2012-10-27 23:40:29
【问题描述】:

我正在尝试编写一个程序来读取字符串并比较字符串中的每个字符以查看它是否按字母顺序排列。

public class Main
{
    public static void Main ( String[] args)
    {
        System.out.println("#Please enter the string: ");
        String s = BIO.getString();

        while(!s.equals("END")){
            int length = s.length();
            String sLC = s.toLowerCase();
            int count = 0;
            boolean inOrder = true;

            for(int i = 0; i < length - 1 ; i++){
                if(sLC.charAt(i).compareTo(sLC.charAt(i+1)) > 0) {
                    inOrder = false;
                    break;
                }   
            }  

            System.out.println("#Please enter the string: ");  
            s = BIO.getString();
        }
    }
}

我正在使用 blueJ,当我尝试编译它时,它给了我错误 'char cannot be dereferenced and highlighting the 'compareTo' method in my IF statement?

【问题讨论】:

    标签: java compareto


    【解决方案1】:

    .charAt() 返回一个char,这是一个原语。它没有.compareTo() 方法。

    char 的行为很像(较小的)int;请改用以下内容:

    if(sLC.charAt(i) > sLC.charAt(i+1)) {
    

    【讨论】:

    • 我认为你想要一个 >,而不是 <.>
    • @LouisWasserman 是的,谢谢。我最初以为他希望它评估为true,而不是false
    • ...除了如果他想要不区分大小写,这不是 OP 想要的。为此,如果我没记错的话,您必须返回 Character 包装器,因为库中有一个专用于 Unicode 感知词典排序的位置。
    • @MarkoTopolnik OP 在开始循环之前调用String sLC = s.toLowerCase();。就口音等而言,是的,这些都是例外。
    • @Eric 啊,好的,谢谢,因为我使用字符串方法来比较两种 char 类型,它给了我这个错误:) 我不知道你可以只使用 > 符号来比较 char类型...
    【解决方案2】:

    sLC.charAt(i) 为您提供原始字符。你不能在原语上调用compareTo。您需要将其包装在 Character 包装器对象中,或者只使用 comparison operator

    if(Character.valueOf(sLC.charAt(i)).compareTo(
       Character.valueOf(sLC.charAt(i+1))) > 0)
    

    或者简单地说:-

    if(sLC.charAt(i) > sLC.charAt(i+1)) 
    

    【讨论】:

      猜你喜欢
      • 2014-02-01
      • 2021-02-07
      • 1970-01-01
      • 2022-01-17
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多