Java 我不熟悉编码。使用控制台输入时,程序的输入始终显示0输出
当我运行代码时,它总是显示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
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();
}