-7

北、南、東、西の中で最も高い値が必要なため、北、南、東、または西の名前を返すだけです。北、南、東、西のすべての値を比較して、最大値を取得する必要があります。

以下は私のコードスニペットです。

public String startpgm(String x){
    String result=null;
    double priority = 0;
    double North    = 1;
    double South    = 3;    
    double East     = 4;
    double West     = 5;

    System.out.println("Priority:"+Math.max(North, South)); //I am getting the max value, what i need is North or South!!
    priority= Math.max(North, South);
    result = Double.toString(priority);
    return result ;
}
4

7 に答える 7

1

hashmap、またはを使用しenumます。これはアルゴリズムのより良いアプローチです。とにかく、変数を使用したい場合:

class Constants {

    public static final int priority = 0;
    public static final int North    = 1;
    public static final int South    = 3;    
    public static final int East     = 4;
    public static final int West     = 5;
  public static String getConstantName(int constVal) {
    if (constantNames == null) {
      Map<Integer, String> cNames = new HashMap<Integer, String>()
      for (Field field : MyClass.class.getDeclaredFields()){
        if ((field.getModifiers() & (Modifier.FINAL | Modifier.STATIC)) != 0) {
            && int.class == field.getType()){
          // only record final static int fields
          cNames.put((Integer)field.get(null), field.getName());
        }
      }
      constNames = cNames;
    }
    return constantNames.get(constVal);
  }
public String startpgm(String x){
    String result=null;

    System.out.println("Priority:"+Math.max(North, South)); //I am getting the max value, what i need is North or South!!
    priority= Math.max(North, South);
    result = Integer.toString(priority);
    return Constants.getConstantName(result) ;
}
}

おかげで:

https://stackoverflow.com/a/6838811/1979882

于 2016-01-12T09:35:45.887 に答える
1

これは、追跡する変数が 4 つしかないことを前提としています。

String[] sValue = {"North","South","East","West"};
int[]    iValue = {1,2,3,4,5}

index = Math.max(North, South);
System.out.println("Priority:"+sValue[index]); 

注: このソリューションは十分に拡張できません。

于 2016-01-12T09:40:28.050 に答える
1

道案内に名前付きエンティティが必要な場合は、列挙型を使用することをお勧めします。

enum Direction { North, South, East, West }

を使用して、各方向を番号に関連付けることができますEnumMap

Map<Direction, Double> dirMap = new EnumMap<>(Direction.class);
dirMap.put(Direction.North, 1.0);
dirMap.put(Direction.South, 3.0);
dirMap.put(Direction.East, 4.0);
dirMap.put(Direction.West, 5.0);

そして、北と南の最大値を次のように見つけることができます。

private static Direction findMax(List<Direction> directions, Map<Direction, Double> dirMap) {
    Direction best = null;
    Double bestValue = null;
    for (Direction d : directions) {
        double dValue = dirMap.get(d);
        if (bestValue==null || bestValue < dValue) {
            best = d;
            bestValue = dValue;
        }
    }
    return best;
}

...
System.out.println("max of north and south is "+findMax(Arrays.asList(Direction.North, Direction.South), dirMap));
于 2016-01-12T09:43:56.553 に答える
1

名前を に格納してMapから、キー値の名前を取得します。

String result=null;
double priority = 0;
double North    = 1;
double South    = 3;    
double East     = 4;
double West     = 5;

Map<Double, String> names = new HashMap();
names.put(North, "North");
names.put(South, "South");
names.put(East, "East");
names.put(West, "West");

System.out.println("Priority:"+Math.max(North, South));
priority= Math.max(North, South);
result = names.get(priority);

return result ;
于 2016-01-12T09:38:00.787 に答える
0

現在のコードの記述方法では、リフレクションを使用して必要なものを取得する必要があります。数値とその文字列表現の両方を同時に提供できるJava Enum 型 ( https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ) を使用することをお勧めします。

于 2016-01-12T09:37:25.557 に答える