1

这是我接受 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

4 回答 4

6

compareTo返回一个intnot a boolean

你想要的是:

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

编辑另外,你应该检查空值:

if (name[j] != null && name[j].equals(small)) {
于 2012-01-10T14:32:43.407 回答
0

CompateTo 返回一个整数,而不是布尔值。您的代码应该类似于 if(name[j].compareTo(small) >1) ...

于 2012-01-10T14:33:42.080 回答
0

您仍然可以使用compareTo,但整个表达式需要返回一个boolean. 一个if陈述需要一个trueorfalse来做出决定(不是一个数字)。

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

这相当于.equals。例如,您还可以使用 > 0 来查看是否name[j]大于small定义的compareTo.

于 2012-01-10T14:35:01.500 回答
0

有一个明显的错误,比如外层for循环开始时,外层i为零,name[0]是你的输入,比如'zzzzz',mark[0]是3443,比如。所以内部循环开始,它从零开始 t0 49 ,并在 name[0-49] 和 small 之间进行比较,即 pre name[i]... 因为 name 数组中只有一个元素.. .所以也许只是比较beteen null和其他一些字符串......错误也很明显......我认为这是主要错误,你可以自己检查......让你失望...... ...

于 2012-01-10T15:09:01.280 回答