2017-03-08 3 views
0

クラスプロジェクトでは、再帰的メソッドを使用して重みの最大値を持つ配列内のオブジェクトを返す必要があります。私は私の人生のために正しい出力を得ることができません。このメソッドは、メソッドがメインメソッドで呼び出されたときに渡される正確なインデックスでPacketオブジェクトを返します。これはメソッドのコードです。最大要素を持つオブジェクトを返すJava再帰

public Packet maxWeightPacket(Packet[] list, int n) { 
    Packet max = new Packet(0, 0.00, ""); 
    if (n == 0) { 
     return list[n]; 
    } else { 
     if (list[n].getWeight() > max.getWeight()) { 
      max = list[n]; 
     } 
     maxWeightPacket(list, n - 1); 
    } 
    return max; 
} 

パケットクラスのコードはここにある:

public class Packet { 
    private int idNumber; 
    private double weight; 
    private String destination; 

    public Packet(int idNumber, double weight, String destination) { 
     this.idNumber = idNumber; 
     this.weight = weight; 
     this.destination = destination; 
    } 

    public boolean isHeavy() { 
     if (weight > 10) 
      return true; 
     else 
      return false; 
    } 

    @Override 
    public String toString() { 
     return idNumber + " " + weight + " " + destination; 
    } 

    public double getWeight() { 
     return weight; 
    } 

    public String getDestination() { 
     return destination; 
    } 

} 

すべてのヘルプや指導をいただければ幸いです。 ありがとう!

+0

あなた 'else'ブロックが完全に再帰呼び出しの戻り値を無視する - そう返さ' max'は常に最初の呼び出し(に割り当てられたままになりますあなたが渡したインデックス) – UnholySheep

+0

@Os。 "n"はリストの長さです。私はそれが問題だと思ったが、私はどのように最大の長さのパケットを追跡し、それを返すか分からない。私は、Packetオブジェクトをインスタンス化して、プロジェクトの制限ごとにmaxWeightPacketメソッドの外側を追跡することはできません。 – JMarotta

+0

@JMarottaあなたの質問の中にメソッドの署名を変更することはできません。 –

答えて

-1

あなたはmethod's署名を変更することはできませんので、何を行うことができますすることです:だから

public Packet maxWeightPacket (Packet[] list, int n) 
     { 
     Packet pack = new Packet (0,0.00,""); 
     if (n == 0) 
     { 
      return list[n]; 
     } 
     if (list[n].getWeight() > list[n-1].getWeight()) 
     { 
       pack = list[n-1].getWeight(); 
       list[n-1].getWeight() = list[n].getWeight(); 
       list[n].getWeight() = pack; 
       maxWeightPacket(list, n-1); 
     } 
     } 

、あなたは常に最後の再帰呼び出し

まで[N-1]リストで最大の体重を維持します
+0

残念ながら、私は追加のパラメータを追加してメソッドのシグネチャを変更することはできません。 – JMarotta

+0

新しいソリューション@JMarottaを確認する –

-1

Packet max = new Packet (0,0.00,"");のようです。

各再帰呼び出しで新しい最大パケットを定義しています。

Packet max外側にmaxWeightPacketメソッドを定義する必要があります。

次にあなたのコードを変更し

Packet max = new Packet (0,0.00,""); 
public static Packet maxWeightPacket(Packet[] list, int n) { 
    if (n < 0) { 
     return max; 
    } else { 
     if (list[n].getWeight() > max.getWeight()) { 
      max = list[n]; 
     } 
     maxWeightPacket(list, n - 1); 
    } 
    return max; 
} 
+0

プロジェクトは制限されているので、maxWeightPacketメソッドがあるクラス再帰で他のパケットオブジェクトを定義することはできません。すべてはその方法の中で行われなければならない。 – JMarotta

+0

メソッドシグネチャを変更できますか? –

+0

残念ながら、いいえ。メソッドのシグネチャは次のとおりでなければなりません:public Packet maxWeightPacket(Packet []、int n) – JMarotta

関連する問題