1

これは私が Java で書いたコードです。itr はキーの反復子です。キーの反復処理で問題に直面しています。コードの問題は次のとおりです。2n 整数の配列が与えられ、この配列の各ペアは整数は、それぞれ恐竜の誕生年と死亡年を表します。考慮したい有効な年の範囲は [-100000 から 2005] です。たとえば、入力が次の場合:

-80000 -79950 20 70 22 60 58 65 1950 2004

これは、最初の恐竜の誕生年が -80000 年で、死亡年が -79950 年であることを意味します。同様に、2 番目の恐竜は 20 歳から 70 歳まで生きました。

一度に生きていた恐竜の最大数を知りたい. 上記の 2n 整数の配列が与えられた場合に、これを計算するメソッドを作成します。

次のいずれかのメソッドを記述します。

C/C++: int find_max_dinosaur (int[] 年);

Java: public int findMaxdinosaur (int[] 年);

package usingarray;


int dinoStrength;
int deathOfDino;
int dinoBirthAge;
int currentDinoBirthAge;
int currentDinoDeathAge;
int count;

TreeMap dino=new TreeMap();
List<Integer> dinos = new ArrayList<Integer>();

Scanner sc=new Scanner(System.in);


public void getDionoAges()
{
    System.out.println("How many Dinosaur");
    dinoStrength=sc.nextInt()+1;
    for(int i=1;i<dinoStrength;i++)
    {
        System.out.println("Please enter "+i+" dino birth age and death age:");
        dino.put(sc.nextInt(),sc.nextInt());
    }
}

public void logic()
{
    Collection value = dino.values();
    Collection key = dino.values();
    Iterator it = value.iterator();
    Iterator itr = key.iterator();

    System.out.println("logic");

    for(int x=0;x<dinoStrength;x++)
    {
        System.out.println("in for");
    while(it.hasNext() && itr.hasNext())
        {
            System.out.println("in while");
            deathOfDino=(int) it.next();
            //currentDinoDeathAge=(int) it.next();
            dinoBirthAge=(int) itr.next();

            while(itr.hasNext())
            {
                System.out.println("In itr while");
                currentDinoBirthAge=(int) itr.next();
                if(dinoBirthAge<=currentDinoBirthAge && currentDinoBirthAge<=deathOfDino)
                {
                    count++;
                    System.out.println(count);
                }
            }
            dinos.add(count);
        }
    }
}

public void display()
{
    Iterator<Integer> it = dinos.iterator();
    while(it.hasNext())
    {
        System.out.println(it.next());
    }
}
public static void main(String[] args) {
    VickyDino vd=new VickyDino();
    vd.getDionoAges();
    vd.logic();
    vd.display();
}

}

4

2 に答える 2

1

あなたの問題はこれだと思います:

Collection value = dino.values();
Collection key = dino.values();

dino.values()2回使用しています。2 番目はおそらくdino.keys(). ただし、誕生年をキーに、死亡年を値に入れているので、おそらく 2 つを入れ替えたいと思うかもしれません。注: ループ内のロジックが正しいかどうかは確認していません。

于 2013-02-03T16:46:47.193 に答える
0

/* 質問: 2n 個の整数の配列が与えられます。この整数の配列の各ペアは、恐竜の誕生年と死亡年をそれぞれ表します。私たちが望む有効な年の範囲...それぞれの恐竜の死。考慮したい有効な年の範囲は [-100000 から 2005] です。

*/

public int findMaxdinosaur (int[] 年) {

    int[] birthDino = new int[years.length];
    int[] deathDino=new int[years.length];

      //Now  birth & death list is made in which death contains even place.

       for(int i=0;i<=years.length-2;i=i+2){  
           birthDino[i]=years[i];
           deathDino[i+1]=years[i+1];
          }
     Arrays.sort(birthDino);
     Arrays.sort(deathDino);
   List<Integer> al=new ArrayList<Integer>();//List is need because i need to remove null values from here
       for(int aa: birthDino){
            al.add(aa);
       }
      al.removeAll(Collections.singleton(0));// Removing all positions which contain null values
    // System.out.println(al);
     List<Integer> all=new ArrayList<Integer>();
       for(int aa: deathDino){
         all.add(aa);                             //adding in to the List
        }
     all.removeAll(Collections.singleton(0));

 int  Alive=0,maxDinos=0,LastBornMax=0;
 int b = 0,d=0;

    while( b!=birthDino.length && d!=deathDino.length) {
            if (birthDino[b] < deathDino[d])  {
                  Alive =  Alive + 1;
                  b = b + 1;
                } 
                 else {
                         Alive =  Alive - 1;
                        d = d + 1  ;    
                       }

            if(maxDinos <  Alive){  //checking the values
                maxDinos =  Alive;
                LastBornMax=birthDino[b-1];
                }
       }//while end

    //S N Prasad Rao.
      return maxDinos;
}//end of method
于 2013-02-04T08:22:15.943 に答える