2012-01-10 23 views
1

這是我的代碼,接受50個名稱和卷號。並按字母順序打印。它給誤差不兼容的類型爲如果(名稱[j]的.compareTo(小))錯誤:當嘗試使用compareTo來比較一個字符串到另一個時,不兼容的類型

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]); 
     } 
    } 
} 
+1

如果你花時間格式化你的代碼,你可能會有更多/更好的迴應... – berry120 2012-01-10 14:31:19

+2

所以我們應該調試你的代碼? – Simone 2012-01-10 14:31:36

+2

我喜歡你的提示如何讓你「dz和d studnt的標記」..... – Max 2012-01-10 14:33:07

回答

6

compareTo返回int不是boolean

你想要的是:

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

編輯此外,你應該檢查空:

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

感謝您的回答 – user1141056 2012-01-10 14:59:43

0

CompateTo返回一個整數,而不是一個布爾值。你的代碼應該是這樣的 如果(名稱[J] .compareTo(小)> 1) ...

+0

當我現在輸入它給出的值java.lang.nullpointerexception – user1141056 2012-01-10 14:51:17

0

,您仍然可以使用compareTo但整個表達式需要返回booleanif聲明要求truefalse作出決定(而不是數字)。

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

這相當於.equals。您也可以使用> 0來查看name[j]是否大於small,如compareTo所定義。

0

例如,當外部for循環開始時,外部i是零,name [0]是您的輸入,例如'zzzzz',mark [0]是3443, 。所以內循環開始,它從零開始49,並且在名稱[0-49]和小名稱之間進行比較,即名稱[i] ...因爲名稱數組中只有一個元素。 。所以也許只是做一個比較beteen null和其他一些字符串...錯誤變得如此明顯.....我認爲這是主要的錯誤,你可以檢查它自己..... bery you .. ...

相關問題