2016-11-21 61 views
0

我有一個函數正在搜索數組中的最大數字。我想讓該函數搜索從控制檯輸入的多個單詞。 例如我輸入兩個單詞(汽車,騎)他們被添加到數組,然後"surasti"功能比較他們,如果他們在陣列中。 我試圖做我自己,但我一開始,似乎太難:(從查找最大數量到查找數組中的單詞的變化

功能是搜索:

public static produktas[] surasti (produktas G[], int n){ 
    produktas A[] = new produktas[1]; 
    produktas max = G[0]; 
    for (int i=1; i<n; i++) 
     if (max.gautiSvori()<G[i].gautiSvori()) max = G[i]; 
    A[0]=max; 
    return A; 
} 

正在調用該函數的代碼(A是你必須在搜索陣列):

case 5: 
     B = surasti(A, n); 
     System.out.println("Sunkiausias gyvunas yra:"); 
     spausdinti_sar_ekrane(B, B.length); 
     break; 

的produktas類:

class produktas { 
    private String pavadinimas; 
    private String salis; 
    private Double svoris; 
    private Double kaina; 

    produktas() {} 
    produktas(String pav, String salis, double svoris, double kaina){ 
     pavadinimas = pav; 
     this.salis = salis; 
     this.svoris = svoris; 
     this.kaina = kaina; 
    } 



    public String gautiPav(){ 
     return pavadinimas; 
    } 

    public String gautiSali(){ 
     return salis; 
    } 

    public double gautiSvori(){ 
     return svoris; 
    } 

    public double gautiKaina(){ 
     return kaina; 
    } 
} 

當我嘗試的功能改變這種(不知道它的做工精細,不能測試):

public static produktas[] surasti (produktas G[], int n){ 
     try{ 
     BufferedReader in = new BufferedReader (new InputStreamReader (System.in)); 
     produktas A[] = new produktas[5]; 
     for (int j=0; j<5; j++){ 
     System.out.println("Kokio produkto ieskosime?"); 
     String found = in.readLine(); 
     for (int i=1; i<n; i++){ 
      if (found.equals(G[i].gautiPav())){ 
       A[j] = G[i]; 
      } 
     } 
    } 
    return A; 
    } catch(IOException ie){ 
      ie.printStackTrace(); 
     } 
    } 

當我嘗試這個代碼,我在public static produktas[] surasti (produktas G[], int n){線得到這個錯誤

This method must return a result of type produktas[] 
+0

給你完整的解決方案將是錯誤的。我會建議你查找HashSet和HashMap – Acewin

+0

@Acewin我已經在Google上搜索了幾個小時,當我發現了一些東西時 - 其他的東西都出錯了......我現在只是鬱悶,哈哈... – labasRyta

+0

爲什麼我不是能夠理解OP的要求?沒有找到數組中的單詞數量只是array.length? – user3437460

回答

0

對於正確地遵守代碼更新你的方法有在catch塊一回也是如此。

public static produktas[] surasti(produktas G[], int n) { 
    try { 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       System.in)); 
     produktas A[] = new produktas[5]; 
     for (int j = 0; j < 5; j++) { 
      System.out.println("Kokio produkto ieskosime?"); 
      String found = in.readLine(); 
      for (int i = 1; i < n; i++) { 
       if (found.equals(G[i].gautiPav())) { 
        A[j] = G[i]; 
       } 
      } 
     } 
     return A; 
    } catch (IOException ie) { 
     ie.printStackTrace(); 
     return null; // Expected return from catch block 
    } 
} 

要理解這個問題正常啓動使用IDE Eclipse等,而不是簡單地用一個記事本和編譯通過Java/javac的

代碼更合適的代碼會像下面。當你想退出程序時在控制檯輸入q。

public static produktas[] surasti(produktas G[], int n) { 
    BufferedReader consoleReader = null; 
    produktas produktasFound[] = new produktas[5]; // Initalize array to store the produkt found 
    try { 
     consoleReader = new BufferedReader(new InputStreamReader(System.in)); 
     boolean exit = false; 
     produktas produktasFound[] = new produktas[5]; 
     int j = 0;//current produktFound index 

     while (!exit) { 
      System.out.println("Kokio produkto ieskosime?"); 
      String produktPav = in.readLine(); 

      if ("q".equals(produktPav)) { 
       exit = true; 
      } else { 
       for (int i=1; i<n; i++){ 
        if (found.equals(G[i].gautiPav())){ 
         A[j] = G[i]; 
         j++; 
        } 
       } 
      } 

      if(j == 5) 
       exit = true; 
     } 
     return produktasFound; // return all the 5 produktas found 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (consoleReader != null) { 
      try { 
       consoleReader.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    return produktasFound; //If no produkt is found from the array returned is blank 
} 
+0

我正在使用它,但由於我是新的,因此我很難理解所有內容,因爲我的主要語言不是英語。現在幾乎一切正常,但是'A [j] = G [i];'我需要將它作爲'A [j] = G [i] .gautiPav();'然後我得到一個錯誤'Type mismatch:無法從字符串轉換爲產品' – labasRyta

+0

錯誤是正確的(很明顯)。方法surasti的目標是什麼。你在A – Acewin

+0

中儲存了什麼,那我該怎麼做? – labasRyta

0

您的比較運算符不正確。試試下面的代碼:

public static produktas surasti(produktas G[]) { 
    produktas max = G[0]; 
    for (int i = 0; i < G.length; i++) { 
     if (max.gautiSvori() < G[i].gautiSvori()) { 
      max = G[i]; 
     } 
    } 
    return max; 
} 

您需要通過陣列和第一默認設置數組作爲最大的第一個元素作爲。接下來遍歷數組並檢查是否有produktas的值更高,爲svoris。如果是這樣,請將最大值改爲指向這個新的produktas。在for循環結束時,您現在將max設置爲produktas,最高值爲svoris

代碼中有幾件事情可以修復,以獲得更高質量的代碼。

  1. 您不需要將數組大小傳遞給surasti方法。我們可以做一個G.length(在上面的代碼中,我已經這樣做了)。
  2. 最佳實踐是用於Java類的用戶駱駝案例。因此,而不是produktas,使用Produktas
  3. 使用有意義的名稱爲變量而不是AG
+0

這個功能沒問題,但我想讓它搜索用戶從控制檯輸入的單詞(可能有多個單詞) – labasRyta

+0

從你共享的代碼在你正在比較一個雙重值的問題。請詳細說明你想要做什麼的問題。您在編輯時看到的最後一個錯誤(此方法必須返回類型爲produktas []的結果)是因爲您返回的是方法簽名中定義的produktas對象而不是數組。請注意,我已將其更改爲返回一個produktas對象。 – maheeka