Java 检查正在运行的方法

Java 检查正在运行的方法,java,println,Java,Println,我只是有一个问题,关于如何查看println中正在运行哪个方法来验证我的代码是否正确。我想看看当用户输入数字时,是蛮力代码运行还是max sub array方法运行。我如何在main方法的println中写入它 package a3; import java.util.Scanner; public class MaxSubarraySum2 { public static void main(String[] args) { Scanner scan = new Scanner(

我只是有一个问题,关于如何查看println中正在运行哪个方法来验证我的代码是否正确。我想看看当用户输入数字时,是蛮力代码运行还是max sub array方法运行。我如何在main方法的println中写入它

package a3;

import java.util.Scanner;

public class MaxSubarraySum2 {
public static void main(String[] args) 
{
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter number of elements in array");
    int N = scan.nextInt();
    int[] arr = new int[ N ];
    /* Accept N elements */
    System.out.println("Enter "+ N +" elements");
    for (int i = 0; i < N; i++)
        arr[i] = scan.nextInt();
    System.out.println("Max sub array sum  = "+ max_sum(arr));
}
public static int max_sum(int[] arr)
{

     int Crossover = 4;
     if (Crossover > arr.length) {
         //Max Sub array is being used
         return max_sum(arr, 0, arr.length - 1); 

     }
    //Brute Force is being used
     else {
            int N = arr.length, max = Integer.MIN_VALUE;
            for (int i = 0; i < N; i++)
            {
                int sum = 0;
                for (int j = i; j < N; j++)
                {
                    sum += arr[j];
                    if (sum > max)
                        max = sum;
                }
            }

            return max;  
     }


}
// Max Sub Array 
public static int max_sum(int[] arr, int low, int mid, int high)
{
    int l = Integer.MIN_VALUE, r = Integer.MIN_VALUE;
    for (int i = mid, sum = 0; i >= low; i--)
        if ((sum += arr[i]) > l)
            l = sum;
    for (int i = mid +1, sum = 0; i <= high; i++)
        if ((sum += arr[i]) > r)
          r = sum;
    return l + r;
}
public static int max_sum(int[] arr, int low, int high)
{
   if (low == high)
     return arr[low];     
   int mid = (low + high)/2;
   int max1 = max_sum(arr, low, mid);
   int max2 = max_sum(arr, mid + 1, high);
   int max3 = max_sum(arr, low, mid, high);
   return Math.max(Math.max(max1, max2), max3); 
}    
}
a3包;
导入java.util.Scanner;
公共类MaxSubraySum2{
公共静态void main(字符串[]args)
{
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入数组中的元素数”);
int N=scan.nextInt();
int[]arr=新的int[N];
/*接受N个元素*/
System.out.println(“输入”+N+“元素”);
对于(int i=0;i阵列长度){
//正在使用Max子数组
返回最大和(arr,0,arr.length-1);
}
//使用暴力
否则{
int N=arr.length,max=Integer.MIN_值;
对于(int i=0;i最大值)
最大值=总和;
}
}
返回最大值;
}
}
//最大子数组
公共静态整数最大和(整数[]arr,整数低,整数中,整数高)
{
int l=整数.MIN\u值,r=整数.MIN\u值;
对于(int i=mid,sum=0;i>=low;i--)
如果((总和+=arr[i])>l)
l=总和;
对于(int i=mid+1,sum=0;i r)
r=总和;
返回l+r;
}
公共静态整数最大和(整数[]arr,整数低,整数高)
{
如果(低==高)
返回arr[低];
int mid=(低+高)/2;
int max1=最大和(arr、低、中);
int max2=最大和(arr,中+1,高);
int max3=最大和(arr、低、中、高);
返回Math.max(Math.max(max1、max2、max3);
}    
}

println必须在主功能中吗?我建议将此类调试输出放在做出决定的地方:

if(交叉>阵列长度){
//正在使用Max子数组
System.out.println(“正在使用最大子数组”);
返回最大和(arr,0,arr.length-1);
}否则{
//使用暴力
System.out.println(“使用暴力”);
int N=arr.length,max=Integer.MIN_值;
对于(int i=0;i最大值)
最大值=总和;
}
}
返回最大值;
}

println必须在主功能中吗?我建议将此类调试输出放在做出决定的地方:

if(交叉>阵列长度){
//正在使用Max子数组
System.out.println(“正在使用最大子数组”);
返回最大和(arr,0,arr.length-1);
}否则{
//使用暴力
System.out.println(“使用暴力”);
int N=arr.length,max=Integer.MIN_值;
对于(int i=0;i最大值)
最大值=总和;
}
}
返回最大值;
}

只需通过以下方式打印被调用方法的堆栈跟踪:

Thread.dumpStack();
比如:


只需通过以下方式打印被调用方法的堆栈跟踪:

Thread.dumpStack();
比如:


我用这种方式。不,它不必在主方法中。它更干净,我用这种方式。不,它不必在主方法中。它更干净。