需要帮助存储二维数组中的特定值

时间:2015-06-25 17:28:56

标签: java arrays sorting parsing

所以我有一个二维数组,如下所示

    {1, 20}
    {1, 14}
    {2, 15}
    {2, 67}
    {3, 55}
    {3, 24} 
    {4, 95}
    {4, 23}

我需要做的是基本找到第2列中对应每个数字的最高数字,因此对于1,最高数字是20,对于2,最高数字是67,等等...所以我试图使用一个看起来像这样的while循环

int count = 0;
int count2 = 0;

int[][] array = {1, 20}
                {1, 14}
                {2, 15}
                {2, 67}
                {3, 55}
                {3, 24} 
                {4, 95}
                {4, 23}
int[] storeMax = new int[4]

while (array[0][count] < array[count].length)
            {
                if (array[count][1] > storeMax[count2])
                {
                    storeMax[count2] = degPerc[count][1];
                    count2++;
                }
                else
                {
                    count++;
                    count2++;
                }
            }

我已经有一段时间了,但似乎无法解决这个问题。如果有人能帮助我那将是非常棒的!

3 个答案:

答案 0 :(得分:1)

我认为一种解决方案与您的解决方案略有不同。

创建Map<Integer, Integer> map。将键存储为第一列并开始将值作为第二列(如果键已存在,则检查值,如果map中的值小于当前值,则替换为当前值)。你得到你的输出

public static void main(String[] args) {
    int[][] array = { { 1, 20 }, { 1, 14 }, { 2, 15 }, { 2, 67 },
            { 3, 55 }, { 3, 24 }, { 4, 95 }, { 4, 23 } };

    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    System.out.println(array.length);
    for(int i=0;i<array.length; i++)
    {
        if(map.get(array[i][0]) == null)
                map.put(array[i][0], array[i][1]);
        else
            if(map.get(array[i][0]) < array[i][1])
            {
                map.put(array[i][0], array[i][1]);
            }
    }
    System.out.println(map);
}

答案 1 :(得分:1)

如果您使用Java 8,则可以使用新的方便static int[][] array = { { 1, 20 }, { 1, 14 }, { 2, 15 }, { 2, 67 }, { 3, 55 }, { 3, 24 }, { 4, 95 }, { 4, 23 } }; public static void main(String args[]) { Map<Integer, Integer> m = new HashMap<>(); for (int i = 0; i < array.length; i++) { int value = array[i][1]; int key= array[i][0]; m.compute(key, (k, v) -> v == null ? value : Math.max(v, value)); } } 方法:

<div class="row">
    <div class="form-group col-md-6 fieldHeight">
        <label for="cycleName" class="col-md-6 required">Scope Type :</label>
        <div class="col-md-6">
            <select kendo-drop-down-list k-data-text-field="'text'"
                k-option-label="'Select'" k-data-value-field="'id'"
                k-data-source="assessmentTypeOptions" name="assessmentType"
                required ng-model="riskAssessmentDTO.scopeType" id="assessmentType"
                maxlength="256" ng-change="assessmentType()"></select>
                <p class="text-danger"
                    ng-show="addAssessment.assessmentType.$touched && addAssessment.assessmentType.$error.required">Assessment
                    Type is required</p>
        </div>
    </div>
    <div class="form-group col-md-6 fieldHeight">
        <label for="assessmentType" class="col-md-5 required">Assessment Type :</label>
        <label class="radio-inline"><input type="radio"
            name="summary" id="summary" ng-value="'summary'"
            ng-model="riskAssessmentDTO.erhFlag" ng-disabled="disableAssessmentType" >Summary </label>
        <label class="radio-inline"><input type="radio"
            name="detail" id="detail" ng-value="'N'"
            ng-model="riskAssessmentDTO.erhFlag" ng-disabled="disableAssessmentType">Detailed</label>
        <p class="text-danger"
            ng-show="addAssessment.includeERHFlag.$touched && addAssessment.includeERHFlag.$error.required">Assessment
            Name is required</p>
    </div>
</div>

答案 2 :(得分:0)

首先,声明像这样的多数组的正确语法是

int[][] array = {{1, 20},
            {1, 14},
            {2, 15},
            {2, 67},
            {3, 55},
            {3, 24},
            {4, 95},
            {4, 23}};

所以你似乎对java中多维数组的工作原理有点不熟悉。它可能值得阅读。请记住,多维数组只是一个存储其他数组的数组。这条线

while (array[0][count] < array[count].length)

可能不是你想要的。你想要做的是循环遍历数组的全部内容,寻找每个键的最大值(第2列)(第1列)。试着像这样循环。

int count = 0;
while(count < array.length){
  count++;
}

现在,您知道数组中的每个条目都有一个索引为0的键和一个索引为1的数值,因此您可以像这样检查它们

int count = 0;
while(count < array.length){
  int keyVal = array[count][0];
  int numVal = array[count][1];
  count++;
}

最后,您的示例数据仅具有1-4的键的可能值。如果它只是1-4,那么你的storeMax变量将用于存储结果。否则,您将需要使用Prashant在上面的评论中所说的Map。

因此,如果键总是在1-4之间,那么你可以在循环中检查并存储它们。

while(count < array.length){
    int keyVal = array[count][0];
    int numVal = array[count][1];

    if(storeMax[keyVal-1] < numVal){
        storeMax[keyVal-1] = numVal;
    }
    count++;
}

请记住,数组是基于0的。这就是你必须使用keyVal-1的原因。