在数组的每一列中查找最小值和最大值
Finding min and max value in each column in array
我的程序有问题。我想在每一列中打印最小值和最大值,但它不能正常工作。我认为一切都应该没问题。当循环结束时,我重新启动最小值和最大值。
public class tablice2 {
public static void main(String[] args){
int t [][] = new int [5][5];
int n [] = new int [5];
int x [] = new int [5];
Random r = new Random();
int min = t[0][0];
int max = t[0][0];
for (int i = 0; i <t.length ;i++){
min = 0;
max = 0;
for(int j = 0; j < t[i].length ;j++){
t[i][j] = r.nextInt(6)-5;
System.out.print(t[i][j] + " ");
if (t[j][i] < min){
min = t[j][i];
}
if (t[j][i] > max){
max = t[j][i];
}
}
n[i]=min;
x[i]=max;
System.out.println(" ");
}
for(int p=0;p<x.length;p++){
System.out.println("Max Column "+p + ": " +x[p] );
}
for(int k=0;k<n.length;k++){
System.out.println("Min Column "+k + ": " +n[k]);
}
}
}
您已将 min
初始化为零,我建议 Integer.MIN_VALUE
。否则正值不能是 "found".
这也是有人已经为你解决的问题,例如通过流:
assertThat(
IntStream.of(new int[] { 1, 2, 3, 4, 5 }).max().getAsInt(),
is(5));
您的第一个循环必须超过列 (j)。
t[0].length
首先在循环中将您的 min
设置为 min = Integer.MAX_VALUE
并且与 max = Integer.MIN_VALUE
类似。这将为我们提供每个随机数将(至少)小于初始化的最小值(并且类似于最大值)
在这种情况下,您抽取的号码是从 -5 到 0,因此您可以将最小值设置为例如 -6 和最大值 1,然后您确定抽取的号码将高于 -6 且小于 1 并且会正确更新
在您的代码中,您混合了 i
和 j
- 它应该是
if (t[i][j] < min){
min = t[i][j];
}
其余代码也类似
此外,当您在 Java 中创建数组时,它会自动初始化为 0。所以
int t [][] = new int [5][5];
int min = t[0][0];
表示 min = 0
因为所有数组都由 0 填充,因此您不必复制代码
不要同时输入和排序,因为元素可能仍会使用默认值(即 0
)进行初始化。此外,在外循环中,将 max
和 min
重置为列的第一个元素。
按如下操作:
import java.util.Random;
public class Main {
public static void main(String[] args) {
int t[][] = new int[5][5];
int n[] = new int[5];
int x[] = new int[5];
Random r = new Random();
int min;
int max;
for (int i = 0; i < t.length; i++) {
for (int j = 0; j < t[i].length; j++) {
t[i][j] = r.nextInt(10) - 5;
System.out.printf("%4d", t[i][j]);
}
System.out.println();
}
for (int i = 0; i < t.length; i++) {
min = t[0][i];
max = t[0][i];
for (int j = 0; j < t[i].length; j++) {
if (t[j][i] < min) {
min = t[j][i];
}
if (t[j][i] > max) {
max = t[j][i];
}
}
n[i] = min;
x[i] = max;
}
for (int p = 0; p < x.length; p++) {
System.out.println("Max Column " + p + ": " + x[p]);
}
for (int k = 0; k < n.length; k++) {
System.out.println("Min Column " + k + ": " + n[k]);
}
}
}
样本运行:
3 -4 2 0 1
-2 -2 4 -1 -2
-3 1 4 -1 0
-4 4 -2 -5 2
-5 -3 -3 -4 -1
Max Column 0: 3
Max Column 1: 4
Max Column 2: 4
Max Column 3: 0
Max Column 4: 2
Min Column 0: -5
Min Column 1: -4
Min Column 2: -3
Min Column 3: -5
Min Column 4: -2
备注:
- 我已将
r.nextInt(6)-5
更改为 r.nextInt(10) - 5
以生成负数、0 和正数的混合,以便您可以快速验证结果。您可以根据需要将其改回 r.nextInt(6)-5
。
- 我还使用
printf
而不是 print
来打印每个数字,每个数字的 space 为 4 个单位。如果您愿意,可以将其改回 print
。
- 根本不需要使用
Integer.MAX_VALUE
and/or Integer.MIN_VALUE
来解决这个问题。
如有任何疑问,请随时发表评论。
我的程序有问题。我想在每一列中打印最小值和最大值,但它不能正常工作。我认为一切都应该没问题。当循环结束时,我重新启动最小值和最大值。
public class tablice2 {
public static void main(String[] args){
int t [][] = new int [5][5];
int n [] = new int [5];
int x [] = new int [5];
Random r = new Random();
int min = t[0][0];
int max = t[0][0];
for (int i = 0; i <t.length ;i++){
min = 0;
max = 0;
for(int j = 0; j < t[i].length ;j++){
t[i][j] = r.nextInt(6)-5;
System.out.print(t[i][j] + " ");
if (t[j][i] < min){
min = t[j][i];
}
if (t[j][i] > max){
max = t[j][i];
}
}
n[i]=min;
x[i]=max;
System.out.println(" ");
}
for(int p=0;p<x.length;p++){
System.out.println("Max Column "+p + ": " +x[p] );
}
for(int k=0;k<n.length;k++){
System.out.println("Min Column "+k + ": " +n[k]);
}
}
}
您已将 min
初始化为零,我建议 Integer.MIN_VALUE
。否则正值不能是 "found".
这也是有人已经为你解决的问题,例如通过流:
assertThat(
IntStream.of(new int[] { 1, 2, 3, 4, 5 }).max().getAsInt(),
is(5));
您的第一个循环必须超过列 (j)。
t[0].length
首先在循环中将您的 min
设置为 min = Integer.MAX_VALUE
并且与 max = Integer.MIN_VALUE
类似。这将为我们提供每个随机数将(至少)小于初始化的最小值(并且类似于最大值)
在这种情况下,您抽取的号码是从 -5 到 0,因此您可以将最小值设置为例如 -6 和最大值 1,然后您确定抽取的号码将高于 -6 且小于 1 并且会正确更新
在您的代码中,您混合了 i
和 j
- 它应该是
if (t[i][j] < min){
min = t[i][j];
}
其余代码也类似
此外,当您在 Java 中创建数组时,它会自动初始化为 0。所以
int t [][] = new int [5][5];
int min = t[0][0];
表示 min = 0
因为所有数组都由 0 填充,因此您不必复制代码
不要同时输入和排序,因为元素可能仍会使用默认值(即 0
)进行初始化。此外,在外循环中,将 max
和 min
重置为列的第一个元素。
按如下操作:
import java.util.Random;
public class Main {
public static void main(String[] args) {
int t[][] = new int[5][5];
int n[] = new int[5];
int x[] = new int[5];
Random r = new Random();
int min;
int max;
for (int i = 0; i < t.length; i++) {
for (int j = 0; j < t[i].length; j++) {
t[i][j] = r.nextInt(10) - 5;
System.out.printf("%4d", t[i][j]);
}
System.out.println();
}
for (int i = 0; i < t.length; i++) {
min = t[0][i];
max = t[0][i];
for (int j = 0; j < t[i].length; j++) {
if (t[j][i] < min) {
min = t[j][i];
}
if (t[j][i] > max) {
max = t[j][i];
}
}
n[i] = min;
x[i] = max;
}
for (int p = 0; p < x.length; p++) {
System.out.println("Max Column " + p + ": " + x[p]);
}
for (int k = 0; k < n.length; k++) {
System.out.println("Min Column " + k + ": " + n[k]);
}
}
}
样本运行:
3 -4 2 0 1
-2 -2 4 -1 -2
-3 1 4 -1 0
-4 4 -2 -5 2
-5 -3 -3 -4 -1
Max Column 0: 3
Max Column 1: 4
Max Column 2: 4
Max Column 3: 0
Max Column 4: 2
Min Column 0: -5
Min Column 1: -4
Min Column 2: -3
Min Column 3: -5
Min Column 4: -2
备注:
- 我已将
r.nextInt(6)-5
更改为r.nextInt(10) - 5
以生成负数、0 和正数的混合,以便您可以快速验证结果。您可以根据需要将其改回r.nextInt(6)-5
。 - 我还使用
printf
而不是print
来打印每个数字,每个数字的 space 为 4 个单位。如果您愿意,可以将其改回print
。 - 根本不需要使用
Integer.MAX_VALUE
and/orInteger.MIN_VALUE
来解决这个问题。
如有任何疑问,请随时发表评论。