求鞍点答案不对应该怎么改



package 第五次作业;

import java.util.Scanner;

public class 鞍点 {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        //找出一个二维数组的鞍点
        //即该位置上的元素在所在行上最大,在所在列上最小(也
        //可能没有鞍点)。
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int [ ][ ] arr = new int[n][n];
        for(int i1=0;i1<n;i1++) {
            for(int j1=0;j1<n;j1++) {
                arr[i1][j1]=sc.nextInt();
            }
        }
        int x = 0;
        int y=0;
        int min1=0;
        int max1=0;
        for(int i = 0;i<n;i++) {
            int max=arr[i][0];
            for(int j=1;j<n;j++) {
                if(arr[i][j]>max) {
                    max=arr[i][j];//行最大
                    x=i;
                    y=j;//列
                    max1=max;
                }    
                int min = arr[x][y];
                if(arr[i][y]<arr[x][y]) {
                    min=arr[i][y];
                    min1=min;
                }            
                }//            
            
            if(max1==min1) {
                System.out.print("鞍点:"+max);
            }
            else {
                System.out.print("没鞍点");
            }
        }
    }

}
import java.util.Scanner;

public class 鞍点 {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        //找出一个二维数组的鞍点
        //即该位置上的元素在所在行上最大,在所在列上最小(也
        //可能没有鞍点)。
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] arr = new int[n][n];
        for(int i1 = 0; i1 < n; i1++) {
            for(int j1 = 0; j1 < n; j1++) {
                arr[i1][j1] = sc.nextInt();
            }
        }
        boolean flag = false; //标记是否找到鞍点
        for(int i = 0; i < n; i++) {
            int max = arr[i][0];
            int x = i;
            int y = 0;
            for(int j = 1; j < n; j++) {
                if(arr[i][j] > max) {
                    max = arr[i][j];
                    y = j;
                }    
            }        
            int min = arr[x][y];
            for(int k = 0; k < n; k++) {
                if(arr[k][y] < min) {
                    min = arr[k][y];
                    x = k;
                }
            }
            if(max == min) {
                System.out.println("鞍点在第" + (x+1) + "行,第" + (y+1) + "列,值为" + max);
                flag = true;
            }
        }
        if(!flag) {
            System.out.println("没有鞍点");
        }
    }

}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7623218
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:如何让对象属性不可配置或枚举
  • 除此之外, 这篇博客: 进程是如何调度的?中的 优先级反置 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    优先级反置是一种现象,发生在基于优先级的调度算法中,即高优先级进程等待低优先级进程的现象。主要原因是资源的占用现象,低优先级占用资源,等待资源使用结束后才能释放资源,需要相同资源的高优先级进程就需要等待。

    下面介绍两个解决方法。

    1. 优先级继承(Priority Inheritance):简单说就是升高占用资源的低优先级进程的优先级,升高成等待资源的高优先级进程。
    2. 优先级天花板协议(priority ceiling protocol):占用资源进程的优先级和所有可能申请该资源的进程的最高优先级相同。
  • 您还可以看一下 孙玖祥老师的图解数据结构与算法课程中的 初识数组小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^