这是我用Java编写的代码,itr是密钥的迭代器,我在迭代密钥时遇到问题,代码的问题是:我们给出了一个2n个整数的数组,其中每个对都在这个整数数组分别代表恐龙的出生年份和死亡年份。我们要考虑的有效年份范围是[-100000到2005]。例如,如果输入为:
-80000 -79950 20 70 22 60 58 65 1950 2004
这意味着第一只恐龙的出生年份为-80000,死亡年份为-79950。同样,第二只恐龙的寿命为20至70岁,依此类推。
我们想知道有史以来最多的恐龙活着。在给定上述2n个整数数组的情况下,编写一个计算方法。
编写以下方法之一:
C / C ++: int find_max_dinosaur(int [] years);
爪哇: public int findMaxdinosaur(int [] years);
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();
}
}
答案 0 :(得分:1)
我认为你的问题是:
Collection value = dino.values();
Collection key = dino.values();
您正在使用dino.values()
两次;第二个应该是dino.keys()
。然而,既然你把出生年份变成了关键,将死亡年份变成了价值观,那么你可能想把这两年转换成两者。注意:我没有检查循环中的逻辑是否正确。
答案 1 :(得分:0)
/ * 问题:我们得到一组2n个整数,其中这个整数数组中的每一对分别代表恐龙的出生年份和死亡年份。我们想要的有效年份范围......分别是恐龙的死亡。我们要考虑的有效年份范围是[-100000到2005]。
* /
public int findMaxdinosaur(int [] years){
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