Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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_Arrays_Algorithm_Sorting_Hashmap - Fatal编程技术网

Java 基于英文名称对整数数组排序

Java 基于英文名称对整数数组排序,java,arrays,algorithm,sorting,hashmap,Java,Arrays,Algorithm,Sorting,Hashmap,例如: Input: { 1,22,44,3456,9999} Output {44,9999,3456,22} 我所做的是将整数、字符串值放入HashMap.map.put0、zero等 使用上面的HashMap创建一个新的字符串数组 String Array{ one,twotwo,fourfour,threefourfivesix,ninenineninenine} 记住字符串数组的输入索引 对字符串数组进行排序,然后使用HashMap将字符串值替换为整数 还有其他更好的方法吗 pac

例如:

Input: { 1,22,44,3456,9999}
Output {44,9999,3456,22}
我所做的是将整数、字符串值放入HashMap.map.put0、zero等

使用上面的HashMap创建一个新的字符串数组

String Array{ one,twotwo,fourfour,threefourfivesix,ninenineninenine}
记住字符串数组的输入索引

对字符串数组进行排序,然后使用HashMap将字符串值替换为整数

还有其他更好的方法吗

package l337;

import java.util.Arrays;
import java.util.HashMap;

public class temp{

public static void main(String[] arg){

    HashMap<Integer,String> map = new HashMap<Integer,String>();
    map.put(0,"zero");
    map.put(1,"one");
    map.put(2,"two");
    map.put(3,"three");
    map.put(4,"four");
    map.put(5,"five");
    map.put(6,"six");
    map.put(7,"seven");
    map.put(8,"eight");
    map.put(9,"nine");

    int[] input ={1,2,44,66,7895,88983};
    String[] stringArray = new String[input.length];

    for(int i=0;i<input.length;i++){

        stringArray[i] = map.get(input[i]);
        if(stringArray[i]==null){
            char[] temp= (new Integer(input[i])).toString().toCharArray();
            for(int j=0;j<temp.length;j++){
                stringArray[i]+=map.get((int)temp[j]-48);
            }
        }
    }
    HashMap<String,Integer> maploc = new HashMap<String,Integer>();
    map.put(0,"zero");
    for(int i=0;i<input.length;i++){
        maploc.put(stringArray[i], input[i]);
    }

    Arrays.sort(stringArray);

    int[] output =new int[input.length];
    for(int i=0;i<input.length;i++){
        output[i]= maploc.get(stringArray[i]);
    }
     for(int i:input){

        System.out.print(i+" ");
    }
     System.out.println();
    for(int i:output){

        System.out.print(i+" ");
    }

    }


}

最好的方法是创建一个具有数字和字符串表示形式的单个对象

i、 e.当您创建一个新的NumberAndName3时,它将内部整数设置为3,内部字符串设置为3。如何处理该映射取决于您,但是如果您只需要数字0到9,那么一个简单的字符串数组就可以了


然后,您可以只使用Collections.sort对NumberAndName对象的集合进行排序,并指定一个使用名称进行比较的比较器。

当您已经有一个存储映射的HashMap时,您可以只使用一个比较器,通过查找和比较映射中的各个值来比较数组项

import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.Map;

public class SortByName
{
    public static void main(String[] args)
    {
        Integer input[] = { 1,22,44,3456,9999};
        final String array[] = { 
            "one", "twotwo", "fourfour", "threefourfivesix", 
            "ninenineninenine"};

        final Map<Integer, String> map = createMap(input, array);
        Arrays.sort(input, new Comparator<Integer>()
        {
            @Override
            public int compare(Integer i0, Integer i1)
            {
                return map.get(i0).compareTo(map.get(i1));
            }

        });
        System.out.println(Arrays.toString(input));
    }

    private static <K, V> Map<K, V> createMap(K k[], V v[])
    {
        Map<K, V> map = new LinkedHashMap<K, V>();
        for (int i=0; i<k.length; i++)
        {
            map.put(k[i], v[i]);
        }
        return map;
    }
}

您可以使用enum表示数字,并具有查找和反向查找、辅助函数以转换为数字字符串或从数字字符串转换为数字字符串。 这是一个快速脏的实现

public static void arrayEnglistTest()
{
    int[] array = { 1, 22, 44, 3456, 9999 };

    String[] stringArray = new String[array.length];
    int idx = 0;
    for (int num : array)
    {
        stringArray[idx++] = getNumberInEnglish(num);
    }

    Arrays.sort(stringArray);

    idx = 0;
    for (String stringNumber : stringArray)
    {
        array[idx++] = getNumber(stringNumber);
    }
}

public static int getNumber(String numberInEnglish)
{
    StringBuilder result = new StringBuilder();
    StringBuilder builder = new StringBuilder();
    for (char c : numberInEnglish.toCharArray())
    {
        builder.append(c);
        String soFar = builder.toString();
        if (DIGIT.getNumber(soFar) != null)
        {
            result.append(DIGIT.getNumber(soFar));
            builder.setLength(0);
        }
    }
    return Integer.parseInt(result.toString());
}

public static String getNumberInEnglish(int number)
{
    StringBuilder builder = new StringBuilder();
    while (number > 0)
    {
        builder.insert(0, DIGIT.getNumberInEnglish(number % 10));
        number /= 10;
    }
    return builder.toString();
}

enum DIGIT
{
    ONE(1, "one"), TWO(2, "two"), THREE(3, "three"), FOUR(4, "four"), FIVE(5, "five"), SIX(6, "six"), SEVEN(7,
            "seven"), EIGHT(8, "eight"), NINE(9, "nine"), ZERO(0, "zero");

    private DIGIT(int digit, String digitInEnglish)
    {
        this.digit = digit;
        this.digitInEnglish = digitInEnglish;
    }

    public static String getNumberInEnglish(int number)
    {
        return map.get(number);
    }

    public static Integer getNumber(String numberInEnglish)
    {
        return reverseMap.get(numberInEnglish);
    }

    int digit;
    String digitInEnglish;

    static Map<Integer,String> map = new HashMap<Integer,String>() {
        {
            for (DIGIT dig : EnumSet.allOf(DIGIT.class))
            {
                put(dig.digit, dig.digitInEnglish);
            }
        }
    };
    static Map<String,Integer> reverseMap = new HashMap<String,Integer>() {
        {
            for (DIGIT dig : EnumSet.allOf(DIGIT.class))
            {
                put(dig.digitInEnglish, dig.digit);
            }
        }
    };
}

你编码到nw的是什么?你可能需要更明确地解释一下你在map.put0,zero等中所指的etc,因为我假设你没有硬编码10000个值。顺便说一句,你的map应该以另一种方式构建:map.putzero,0。你可以为整数创建一个比较器,然后用你的自定义比较器排序。从那里可能复制,只需根据结果字符串进行排序。此解决方案看起来比我的原始编码要好得多。