所以我有一个二维数组,如下所示
{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++;
}
}
我已经有一段时间了,但似乎无法解决这个问题。如果有人能帮助我那将是非常棒的!
答案 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的原因。