Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替换地图中的键,_Java_If Statement_Map_Iterator_Key Value - Fatal编程技术网

Java 替换地图中的键,

Java 替换地图中的键,,java,if-statement,map,iterator,key-value,Java,If Statement,Map,Iterator,Key Value,我已经做了一个程序,使一个新的地图,并采取从用户的输入,并填写地图 然后我反转了贴图键/值,并用它制作了一个新的贴图 我唯一要做的就是,最难的部分。。。检查“值”中是否有重复项,如果有。。。我只想保留与其键的较小值相对应的1。。。 例如,如果我有12=13,8=13,我想把8=13放在我的第二个倒转贴图中,然后去掉12=13 public class { public static void main(String[] args) { PrintStream output = new P

我已经做了一个程序,使一个新的地图,并采取从用户的输入,并填写地图

然后我反转了贴图键/值,并用它制作了一个新的贴图

我唯一要做的就是,最难的部分。。。检查“值”中是否有重复项,如果有。。。我只想保留与其键的较小值相对应的1。。。 例如,如果我有12=13,8=13,我想把8=13放在我的第二个倒转贴图中,然后去掉12=13

public class
{
public static void main(String[] args)
{
    PrintStream output = new PrintStream(System.out);
    Scanner input = new Scanner(System.in);


    Map<String,String> normal = new HashMap<String,String>();

    output.println("Enter your map, one key-value pair per line,");
    output.println("comma-separated. Use empty line as sentinel.");

    for ( String entry = input.nextLine(); entry.length() !=0;
        entry = input.nextLine())
    {
    int comma = entry.indexOf(",");
    String key = entry.substring(0,comma);
    String value = entry.substring(comma+1);
    normal.put(key,value);

    }
    output.println(normal);

    Map<String,String> reverse = new HashMap<String,String>();

    for (Map.Entry<String,String> entry : normal.entrySet())
    {

        String keyY = entry.getKey();
        String valueE = entry.getValue();
        reverse.put(valueE,keyY);



    }
    output.println(reverse);

}
 }
公共类
{
公共静态void main(字符串[]args)
{
PrintStream输出=新的PrintStream(System.out);
扫描仪输入=新扫描仪(System.in);
Map normal=新的HashMap();
println(“输入地图,每行一个键值对,”);
println(“逗号分隔。使用空行作为哨兵”);
对于(String entry=input.nextLine();entry.length()!=0;
entry=input.nextLine())
{
int逗号=entry.indexOf(“,”);
String key=entry.substring(0,逗号);
字符串值=entry.substring(逗号+1);
正常。输入(键、值);
}
输出println(正常);
Map reverse=新的HashMap();
对于(Map.Entry:normal.entrySet())
{
字符串keyY=entry.getKey();
字符串valueE=entry.getValue();
反向放置(valueE,keyY);
}
输出。打印项次(反向);
}
}

最简单的解决方案似乎是在for循环的每次迭代中查看反向映射,看看它是否已经有一个带有键
valueE
的条目。如果是,请查看
keyY
的新潜在值是否较小,如果较小,请将其放入地图中(这样做将替换旧值)

您可以使用
Integer.parseInt(whateverString)
字符串
值转换为
int
s进行比较

最后,如果条目的当前值为null(在本上下文中,这意味着不存在以前的条目),则将新值放入映射中

那么像这样,

import java.util.*;
import java.io.PrintStream;

public class KeyValueSwitcher {

    public static void main(String[]args) {
        PrintStream output=new PrintStream(System.out);
        Scanner input=new Scanner(System.in);


        Map<String, String>normal=new HashMap<String, String>();

        output.println("Enter your map, one key-value pair per line,");
        output.println("comma-separated. Use empty line as sentinel.");

        for(String entry=input.nextLine();entry.length()!=0;
        entry=input.nextLine()) {
            int comma=entry.indexOf(",");
            String key=entry.substring(0,comma);
            String value=entry.substring(comma+1);
            normal.put(key,value);

        }
        output.println(normal);

        Map<String, String>reverse=new HashMap<String, String>();

        for(Map.Entry<String, String>entry:normal.entrySet()) {

            String keyY=entry.getKey();
            String valueE=entry.getValue();
            // check to see if we've already put an entry in the reverse map for this key.
            String existingReverseValue = reverse.get(valueE);
            if(existingReverseValue != null) {
                // We have, so let's see if the value is greater or less
                int currentValue = Integer.parseInt(existingReverseValue);
                int potentialNewValue = Integer.parseInt(keyY);
                if(potentialNewValue < currentValue) {
                    // Old reverse value is greater, so replace with new reverse value
                    reverse.put(valueE, keyY);
                }
            } else {
                // No previous reverse value exists, so add new reverse value
                reverse.put(valueE,keyY);
            }
        }
        output.println(reverse);
    }
}
import java.util.*;
导入java.io.PrintStream;
公共类KeyValueSwitcher{
公共静态void main(字符串[]args){
PrintStream输出=新的PrintStream(System.out);
扫描仪输入=新扫描仪(System.in);
Mapnormal=新HashMap();
println(“输入地图,每行一个键值对,”);
println(“逗号分隔。使用空行作为哨兵”);
对于(String entry=input.nextLine();entry.length()!=0;
entry=input.nextLine()){
int逗号=entry.indexOf(“,”);
String key=entry.substring(0,逗号);
字符串值=entry.substring(逗号+1);
正常。输入(键、值);
}
输出println(正常);
Mapreverse=新HashMap();
对于(Map.Entryentry:normal.entrySet()){
字符串keyY=entry.getKey();
字符串valueE=entry.getValue();
//检查是否已将此密钥的条目放入反向映射中。
字符串existingreverseevalue=reverse.get(valueE);
如果(existingReverseValue!=null){
//我们有,让我们看看这个值是大还是小
int currentValue=Integer.parseInt(现有反向值);
int-potentialNewValue=Integer.parseInt(keyY);
if(潜在新值<当前值){
//旧的反向值更大,因此替换为新的反向值
反向放置(valueE,keyY);
}
}否则{
//不存在以前的反向值,因此请添加新的反向值
反向放置(valueE,keyY);
}
}
输出。打印项次(反向);
}
}

不太清楚您想要什么,也许可以给出一个代码示例?在第二个映射中输入键/值之前,请检查键是否已经存在?抱歉,这是代码..我有点困惑--您希望将键值项保留在键较小的位置,就像它是一个数字一样。但是你使用的不是地图,而是地图。如果您的地图存储字符串,则无法保证您的密钥可以转换为数字。如果不是“8”=“13”和“12”=“13”,而是“hello”=“13”和“hi”=“13”呢?你想保留哪一个?或者你真的想用数字地图而不是字符串地图吗?@TJamesBoone说实话,我应该用地图,但我真的不知道如何从用户那里获取输入。。。使用字符串可以搜索逗号和您知道的2个数字。。我肯定有办法,但我想不出来,所以我在书上写下了这个方法。所以输入肯定是数字,肯定会有重复的值。。。我首先需要确定值的重复项(我试着用getValues()这样做,结果成功了),但是我无法替换coresponding键smaller键:(我搜索了整个API。。。