更改查找最大数字以查找数组

时间:2016-11-21 18:42:37

标签: java

我有一个在数组中搜索最大数字的函数。我想使函数搜索从控制台输入的多个单词。 例如,我输入了两个单词(car,ride),它们被添加到数组中,然后"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[]

2 个答案:

答案 0 :(得分: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类用户提供Camel案例。因此,请使用produktas
  3. 而不是Produktas
  4. 为变量使用有意义的名称,而不是AG

答案 1 :(得分: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
    }
}

要正确理解问题,请开始使用像eclipse这样的IDE,而不是简单地使用记事本并通过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
}