错误:尝试使用compareTo将一个字符串与另一个字符串进行比较时出现不兼容的类型

时间:2012-01-10 14:30:07

标签: java bluej

这是我的代码,可以接受50个名字并且滚动号码。并按字母顺序打印。它为if(name [j] .compareTo(small))

提供了错误不兼容的类型
import java .io.*;
class student
{
    public void main()throws IOException
    {
      BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
      String name[]=new String[50];
      int mark[]=new int[50];
      int i;
      for( i=0;i<=49;i++)
      {
        System.out.println("plz ntr d name of d studnt");
        name[i]=br.readLine();
        System.out.println("plz ntr d marks of d studnt");
        mark[i]=Integer.parseInt(br.readLine());
        int j,pos=0;
        String temp, small;
        for(i=0;i<49;i++)
        {
          small=name[i];
          pos=i;
          for(j=i+1;j<49;j++)
          {
            if(name[j].compareTo(small))
              pos=j;
          }
        }
        temp=name[i];
        name[i]=name[pos];
        name[pos]=temp;
      }
      for(i=0;i<=49;i++)
      {
        System.out.println((i+1)+" "+name[i]+" "+mark[i]);
      }
    }
 }

4 个答案:

答案 0 :(得分:6)

compareTo会返回int而不是boolean

你想要的是:

if(name[j].equals(small)) {

编辑此外,您应该检查null:

if (name[j] != null && name[j].equals(small)) {

答案 1 :(得分:0)

CompateTo返回一个整数,而不是布尔值。你的代码应该是这样的 if(name [j] .compareTo(small)&gt; 1) ...

答案 2 :(得分:0)

您仍然可以使用compareTo,但整个表达式需要返回booleanif语句需要truefalse来做出决定(而不是数字)。

if(name[j].compareTo(small) == 0)

这相当于.equals。你也可以使用&gt;例如0,看看name[j]是否大于small定义的compareTo

答案 3 :(得分:0)

有一个明显的错误,例如,当外部for循环开始时,外部i为零,name [0]是您的输入,例如'zzzzz',标记[0]是3443,例如。所以内部循环开始,它从零t0 49开始,并在名称[0-49]和小名称之间建立一个comopare,即名称[i] ......因为名称数组中只有一个元素。所以也许只是做一个比较beteen null和其他一些字符串...错误alose这么明显.....我认为这是主要的错误,你可以自己检查..... bery you .. ...