Ошибка: несовместимый тип при попытке использовать CompareTo для сравнения одной строки с другой - PullRequest
1 голос
/ 10 января 2012

Это мой код для принятия 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 ]

6 голосов
/ 10 января 2012

compareTo возвращает int, а не boolean.

Что вы хотите:

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

РЕДАКТИРОВАТЬ Кроме того, вы должны проверитьnull:

if (name[j] != null && name[j].equals(small)) {
0 голосов
/ 10 января 2012

есть очевидная ошибка, например, когда начинается внешний цикл for, внешний i равен нулю, name [0] - ваш ввод, например, 'zzzzz', отметка [0] - 3443, например.так что внутренний цикл начинается, он начинается с нуля t0 49, и делает comopare между name [0-49] и маленьким, то есть pre name [i] ... потому что в массиве имен есть только один элемент ..так что, может быть, просто сделайте сравнение beteen null и другие некоторые String ... ошибка alose настолько очевидна ..... я думаю, что это основная ошибка, вы можете проверить это сами ..... похоронить вас .....

0 голосов
/ 10 января 2012

Вы все еще можете использовать compareTo, но все выражение должно возвращать boolean. Для утверждения if требуется true или false для принятия решения (не число).

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

Это эквивалентно .equals. Вы также можете использовать> 0, например, чтобы увидеть, больше ли name[j] чем small, как определено compareTo.

0 голосов
/ 10 января 2012

CompateTo возвращает целое число, а не логическое значение.Ваш код должен быть похож на if (name [j] .compareTo (small)> 1) ...

...