Java 我不熟悉编码。使用控制台输入时,程序的输入始终显示0输出

Java 我不熟悉编码。使用控制台输入时,程序的输入始终显示0输出,java,binary-search,Java,Binary Search,当我运行代码时,它总是显示0作为输出。这段代码是关于二进制搜索的。我使用缓冲区读取器进行输入 import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) throws java.lang.Exception { BufferedReader in = new BufferedReader(new InputStreamRea

当我运行代码时,它总是显示0作为输出。这段代码是关于二进制搜索的。我使用缓冲区读取器进行输入

import java.util.*;
import java.lang.*;
import java.io.*;
class Main
{ 
public static void main (String[] args) throws java.lang.Exception
{  
   BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
   Main mainclass= new Main();
    int t =Integer.parseInt(in.readLine()); 

    for(int i = 0;i<t;i++)
    {   StringTokenizer tokenizer = new StringTokenizer(in.readLine());
        int N = Integer.parseInt(tokenizer.nextToken());
        int C = Integer.parseInt(tokenizer.nextToken());

    int[] arr= new int[N];
           for(int x=0;x<N;x++)
             {  arr[i] =Integer.parseInt(in.readLine());} 

        int res=  mainclass.bs(N,C,arr);
     System.out.println(res);
    }

}
import java.util.*;
导入java.lang.*;
导入java.io.*;
班长
{ 
公共静态void main(字符串[]args)引发java.lang.Exception
{  
BufferedReader in=新的BufferedReader(新的InputStreamReader(System.in));
Main Main class=新的Main();
int t=Integer.parseInt(in.readLine());

对于(inti=0;i找到了您的问题,这是填充初始数组

我自己在这里修改了您的代码,使用Scanner和split(也删除了一些不相关的代码),但问题是一样的:

import java.util.Arrays;
import java.util.Scanner;
class Main
{
    public static void main (String[] args)
    {
        Scanner scan = new Scanner(System.in);
        int t =scan.nextInt(); scan.nextLine();

        for(int i = 0;i<t;i++)
        {
            String[] input = scan.nextLine().split(" ");
            int N = Integer.parseInt(input[0]);
            int C = Integer.parseInt(input[1]);

            int[] arr= new int[N];
            for(int x=0;x<N;x++){
                arr[i] = scan.nextInt();
                scan.nextLine();
            }

            int res=  bs(N,C,arr);
            System.out.println("RES = " + res);
        }

    }

    public static int bs(int N,int C,int[] arr) {
        Arrays.sort(arr);
        int left = 0;int right = arr[N-1]-arr[0];int mid =  arr[N-1]-arr[0];
        int max= -1;
        while(left<right){
            int temp= checker(mid,arr);
            if(temp>=C){
                if(max<mid)
                    max=mid;
                left = mid+1;
                mid = (left+right)/2;  }
            else {
                right= mid;
                mid=(left+right)/2;
            }
        }
        return max;
    }

    public static int checker(int mid,int[] arr){
        int f=0;int cows=1;
        for(int i=0;i<arr.length-1;i++) {
            if((arr[i+1]-arr[f])>=mid) {
                f=i+1;
                cows++;
            }
        }
        return cows;
    }
}

您没有显示全部代码。如果显示,则Main中没有bs方法,因此您的代码将无法编译。如果您刚刚开始学习编码,请不要使用StringTokenizer,它大约在十年前就被弃用了。请使用StringInstead的拆分方法,其中是“bs”方法在主类中?请分享完整的代码,这可能会有所帮助。bs方法在主类中。它在使用控制台输入时显示正确的输出,它总是显示0作为输出。因此,如果它总是显示正确的输出,那么这个问题是关于什么的?问题是:如果这解决了你的问题,你能接受答案吗?是的,当然!实际上我不知道w到stackoverflow,所以我不知道如何接受答案。@MukeshYadav将其标记为已解决只是通知其他人,以便问题实际已解决,这可能会让他们有时间查看它!很抱歉,它被错误单击,我只是在检查一些东西。真的非常抱歉!向上投票?下一步只是单击向上箭头答案
import java.util.Arrays;
import java.util.Scanner;
class Main
{
    public static void main (String[] args)
    {
        Scanner scan = new Scanner(System.in);
        int t =scan.nextInt(); scan.nextLine();

        for(int i = 0;i<t;i++)
        {
            String[] input = scan.nextLine().split(" ");
            int N = Integer.parseInt(input[0]);
            int C = Integer.parseInt(input[1]);

            int[] arr= new int[N];
            for(int x=0;x<N;x++){
                arr[i] = scan.nextInt();
                scan.nextLine();
            }

            int res=  bs(N,C,arr);
            System.out.println("RES = " + res);
        }

    }

    public static int bs(int N,int C,int[] arr) {
        Arrays.sort(arr);
        int left = 0;int right = arr[N-1]-arr[0];int mid =  arr[N-1]-arr[0];
        int max= -1;
        while(left<right){
            int temp= checker(mid,arr);
            if(temp>=C){
                if(max<mid)
                    max=mid;
                left = mid+1;
                mid = (left+right)/2;  }
            else {
                right= mid;
                mid=(left+right)/2;
            }
        }
        return max;
    }

    public static int checker(int mid,int[] arr){
        int f=0;int cows=1;
        for(int i=0;i<arr.length-1;i++) {
            if((arr[i+1]-arr[f])>=mid) {
                f=i+1;
                cows++;
            }
        }
        return cows;
    }
}
for(int x=0;x<N;x++){
                arr[i] = scan.nextInt();
                scan.nextLine();
            }
for(int x=0;x<N;x++){
                arr[x] = scan.nextInt();
                scan.nextLine();
            }