2016-11-21 42 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