无法从 Map.Entry<String,Integer> 转换为 String



经过两个小时的努力,我发布了这篇文章,但我想在这里得到一些帮助。任务如下:

创建一个方法getHeavyst,该方法不接受任何参数并返回一个字符串。调用时,该方法应返回数据库中最重恐龙的名称。你如何做到这一点取决于你自己。如果数据库中没有恐龙,则返回一个空字符串。不要担心恐龙有同样的重量。

import java.util.Map;
import java.util.Collections;
import java.util.HashMap;
import java.util.Set;
import java.util.Map.Entry;

public class randomdamdam {
private Map<String, Integer> dinos;
public randomdamdam () {
dinos = new HashMap<>();
}
public int size(){
return dinos.size();
}
public void addDino(String newDino, int weight){
if (!dinos.containsKey(newDino)) {
dinos.put(newDino, weight);
System.out.println(newDino + " added. Weight: " + newDino + "kg");
} else {
System.out.println(newDino + " cannot be added. It is already in the database!");
}
}
public void updateDino (String updatedDino, int newWeight){
if (dinos.containsKey(updatedDino)){
System.out.println(updatedDino + "updated. Weight: " +newWeight+ "kg"); 
} else {
String line = updatedDino + "cannot be updated. It is not in the database!";
System.out.println(line);
}
}
public void removeDino (String removedDino) {
if (dinos.containsKey(removedDino)){
System.out.println(removedDino + "removed"); 
} else {
String line2= removedDino +"cannot be removed. It is not in the database!";
System.out.println(line2);
}
}
public int getWeight (String existingDinosaur) {
if (dinos.containsKey(existingDinosaur)){
return dinos.get(existingDinosaur);
} else {
String ofweight = existingDinosaur + "cannot be found in the database!";
System.out.println(ofweight);
return 0;
}
}
public Set<String> getDinoNames(){
Set<String> names = dinos.keySet();
return names;
}
public String getHeaviest () {
int max = Collections.max(dinos.values());
for (Entry<String, Integer> heaviestBoi : dinos.entrySet()) {
if (heaviestBoi.getValue() == max ) {
String heavy = heaviestBoi.toString();

return heaviestBoi;
}}
}

所以问题是,我想从每只恐龙中选出最重的恐龙,我已经试过多次了,但实际上我做不到。

请像下面这样重构getHeaviest((方法。下面给出了完整的源代码,以便您更好地理解。

额外:在命名类时,请遵循Java命名约定。例如:类名的起始字母应该总是大写

public class randomdamdam {
private Map<String, Integer> dinos;

public randomdamdam () {
dinos = new HashMap<>();
}
public int size(){
return dinos.size();
}
public void addDino(String newDino, int weight){
if (!dinos.containsKey(newDino)) {
dinos.put(newDino, weight);
System.out.println(newDino + " added. Weight: " + newDino + "kg");
} else {
System.out.println(newDino + " cannot be added. It is already in the database!");
}
}
public void updateDino (String updatedDino, int newWeight){
if (dinos.containsKey(updatedDino)){
System.out.println(updatedDino + "updated. Weight: " +newWeight+ "kg"); 
} else {
String line = updatedDino + "cannot be updated. It is not in the database!";
System.out.println(line);
}
}
public void removeDino (String removedDino) {
if (dinos.containsKey(removedDino)){
System.out.println(removedDino + "removed"); 
} else {
String line2= removedDino +"cannot be removed. It is not in the database!";
System.out.println(line2);
}
}
public int getWeight (String existingDinosaur) {
if (dinos.containsKey(existingDinosaur)){
return dinos.get(existingDinosaur);
} else {
String ofweight = existingDinosaur + "cannot be found in the database!";
System.out.println(ofweight);
return 0;
}
}
public Set<String> getDinoNames(){
Set<String> names = dinos.keySet();
return names;
}
public String getHeaviest () {//Here is your method which returns the heaviest dino's name
int max = -1;
String name= null;
for (Map.Entry<String, Integer> heaviestBoi : dinos.entrySet()) {
if (heaviestBoi.getValue() >max ) {
max = heaviestBoi.getValue();
name = heaviestBoi.getKey();

}}
return name;

}

public static void main(String[] args) {
randomdamdam m1 = new randomdamdam();
m1.addDino("Dino1", 450);
m1.addDino("Dino2",455);
m1.addDino("Dino3",700);

System.out.println("Heaviest Dino: "+ m1.getHeaviest() );//Calling the method 
}
}

输出:

Dino1 added. Weight: Dino1kg
Dino2 added. Weight: Dino2kg
Dino3 added. Weight: Dino3kg
Heaviest Dino: Dino3 //Heaviest one's name returned

地图的键必须是恐龙的名称,值必须是它的键。所以,不必将amp强制转换为String(这是失败的(,您必须返回恐龙的名称密钥

更换

String heavy = heaviestBoi.toString();

带有

String heavy = heaviestBoi.getKey();

并返回该字符串而不是映射对象

我想你已经很接近了。查看您的getHeaviest方法,在if语句中,您基本上必须获得"的关键元素;条目";对象(恐龙的名字(。不能简单地返回整个heaviestBoi对象,因为它属于Entry类型。

解决方案

public String getHeaviest () {
int max = Collections.max(dinos.values());
for (Entry<String, Integer> heaviestBoi : dinos.entrySet())
{
if (heaviestBoi.getValue() == max ) {                            
return heaviestBoi.getKey();
}
}
}

附加注释

请注意,您在if声明中写了以下内容:

String heavy = heaviestBoi.toString();
return heaviestBoi;

因此,第一行实际上对返回的对象没有任何影响。

相关内容

最新更新