Java 如何找到二维数组的最大值和最小值的位置
我不知道我是否清楚这一点,但我已经有了最小和最大打印权,但我似乎不知道如何说出它们所在的确切行和列。 这就是我目前所拥有的Java 如何找到二维数组的最大值和最小值的位置,java,arrays,loops,multidimensional-array,max,Java,Arrays,Loops,Multidimensional Array,Max,我不知道我是否清楚这一点,但我已经有了最小和最大打印权,但我似乎不知道如何说出它们所在的确切行和列。 这就是我目前所拥有的 double max = m[0][0]; double min = m[0][0]; System.out.println("The matrix is : "); for(int i = 0; i < m.length; i++) { for ( int j = 0; j <
double max = m[0][0];
double min = m[0][0];
System.out.println("The matrix is : ");
for(int i = 0; i < m.length; i++)
{
for ( int j = 0; j < m[i].length; j++ )
{
System.out.printf(" " + "%6.1f " , m[i][j]);
if (m[i][j] > max)
max = m [i][j];
else if
(m[i][j] < min)
min = m [i][j];
double max=m[0][0];
双最小值=m[0][0];
System.out.println(“矩阵为:”);
对于(int i=0;imax)
max=m[i][j];
否则如果
(m[i][j]
我怎样才能声明它们的位置?例如:(“最大数量在第1行第2列”)诸如此类。。。
我非常感谢任何帮助查看下面的修改。我添加了变量来跟踪最小和最大的索引。在循环结束时,您可以简单地打印出
maxIndex1
、maxIndex2
、minIndex1
和minIndex2
double max = m[0][0];
double min = m[0][0];
//declare variables to track the indices of the min and max
int maxIndex1 = -1;
int maxIndex2 = -1;
int minIndex1 = -1;
int minIndex2 = -1;
System.out.println("The matrix is : ");
for(int i = 0; i < m.length; i++)
{
for ( int j = 0; j < m[i].length; j++ )
{
System.out.printf(" " + "%6.1f " , m[i][j]);
if (m[i][j] > max)
{
max = m [i][j];
//record the indices of the new max
maxIndex1 = i;
maxIndex2 = j;
}
else if (m[i][j] < min)
{
min = m [i][j];
//record the indices of the new min
minIndex1 = i;
minIndex2 = j;
}
double max=m[0][0];
双最小值=m[0][0];
//声明变量以跟踪最小值和最大值的索引
int maxIndex1=-1;
int maxIndex2=-1;
int minIndex1=-1;
int minIndex2=-1;
System.out.println(“矩阵为:”);
对于(int i=0;imax)
{
max=m[i][j];
//记录新max的索引
maxIndex1=i;
maxIndex2=j;
}
else如果(m[i][j]
请注意,如果数组中有两个相等且与最大值绑定的值,这将只记录其中一个。如果要记录最小/最大值的所有绑定位置,可以将其更改为保存坐标列表,而不是单个坐标。这很简单!只需声明另外两个变量来存储您的x和y坐标。并在if和else中更新它们(别忘了在if和else子句中添加大括号!),这样你就有了它们!当你做
max=m[i][j]
时,也要存储位置。所以在顶部,有double max=m[0][0];int x=0;int y=0;
其中x
和y
是坐标。因此在max=m[i][j]下
,你写的是x=i;y=j;
。一般来说,存储最大值和最小值的最好方法是在你向数组中输入值时,如果你有选择的话,保持“运行”最大值和最小值的标签。你没有显示你是如何向数组中输入值的,所以我不知道你是在控制它还是外力。如果将值输入到数组中,那么在事后尝试搜索是不必要的,也是浪费的,因为您已经能够事先了解该信息。值得注意的是,只有当最大值和最小值在矩阵中是唯一的时,这才有效,因为您只存储了一个位置。您可以删除 < <代码> >如果< >代码>如果你有一个排序的数组。@ GunARME,我认为这个例子将为OP所需要的工作,但是它绝对是值得注意的。我编辑了我的文章来包括这个。到OP:考虑在多个并行线程上做数组的第一个维度,以减少查找Min和Max Valu所需的时间。e@searchengine27如果所讨论的数组非常大,这不是一个坏主意。如果它们是正常大小,则不需要进行此优化。在这种情况下,不需要大括号。根据Java规范,if语句的文字语法是if ParExpression语句[else语句]
其中Statement
是块语句或单行语句。我同意,大括号是不必要的,纯粹是可选的和个人偏好。那么,你是说这很好?!如果(m[I][j]>max)max=m[I][j];maxIndex1=I;maxIndex2=j;