gpt4 book ai didi

java - 根据用户输入在 1 到 100 范围内执行二分搜索

转载 作者:行者123 更新时间:2023-12-02 03:01:10 27 4
gpt4 key购买 nike

我正在运行一个二分搜索程序,该程序接受用户输入的字符“l”表示低值,“h”表示高值,如果值正确则输入“c”。我的第一个方法返回字符我的中点方法仅读取第一个字符输入。如果我从 50 开始并按“h”,中点会正确上升到 75,但我无法让程序读取“l”并将值再次降低到 50。该程序仅读取用户输入的第一个字符,但我需要更新答案中的值。是我的 while 循环错误还是我的决策语句错误?谢谢。

import java.util.Scanner;

public class PlayGuessingGame {
public static char getUserresponseGuess(){
Scanner scan = new Scanner(System.in);
char guesses = scan.next().charAt(0);
System.out.println("this is the user input " + guesses);
return(guesses);
}

public static int getMidpoint(int low, int high){
int middle;
//the midpoint is high + low divided by 2
middle = (low + high)/ 2;

System.out.println("is it " + middle);
char answer = getUserresponseGuess();

System.out.println("this is the answer " + answer);

//char get_input = getUserresponseGuess();
//System.out.println("this is the output "+ get_input);
while(low <= high){
if(answer == 'h'){
low = middle + 1;
System.out.println("this is low " + low);
middle = (low + high)/2;

char new_answer = getUserresponseGuess();
middle = (low + high)/2;
System.out.println("is it" + middle);
getUserresponseGuess();
}
//the number presented to the user is is too high, the midpoint is high -1
else if(answer == 'l'){
System.out.println("we're in the low portion");
high = middle - 1;
middle = (low + high) /2;
System.out.print("is it " + middle);
middle = (low + high) /2;
}
if(answer == 'c'){
System.out.println("congrats!");
}
return(middle);
}
return(-1);
}

public static void main(String[] args){
getMidpoint(1,100);
}
}

最佳答案

你这里有一些错误。我会尽力回答每一个问题,但我可能会错过一些问题,如果我错过了一个,请突出显示一些。让我们看看这个只有注释的循环,以使其更具可读性

while(low <= high){
if(answer == 'h'){
//calculate higher
//ask input #####
//calculate higher
//ask input #####
} else if(answer == 'l'){
//calculate lower
}
if(answer == 'c'){
//Congrats
}
//end method
}

评估

首先,您在 if(answer == 'h') 中执行了太多操作。您正在计算两次中间,中间有一个新的输入询问。不应该这样做。

这个想法是在每个循环中要求用户输入一次

是否循环?

由于循环中有一个 return 语句,没有任何条件,因此无论如何都会执行它。所以你的循环只执行一次(这并不是真正的循环)。以下语句将简单地停止循环并退出该方法:

return(middle);

我相信这应该是在前面的条件下,只有当用户输入正确时才停止该方法:

if(answer == 'c'){
System.out.println("congrats!");
return(middle);
}

切换

你可以使用 switch 来代替这 3 个条件,这样会更干净,

if (answer == 'h')
else if (answer == 'l')
else if (answer == 'c')

所以上面的条件可以写成

switch(answer){
case 'h':

break;
case 'l':

break;
case 'c':

break;
default:

}

获取输入

您需要获取每个循环的输入,因此在循环开始时(就在 while 行之后)执行此操作会更容易。更好的是,直接在开关中,因为稍后您实际上不需要输入,例如:

switch(getUserresponseGuess()){
...
}

扫描仪

嗯,您不应该每次都创建一个新的 Scanner 实例,您在读取值的方法中所做的事情:

public static char getUserresponseGuess(){  
Scanner scan = new Scanner(System.in);
char guesses = scan.next().charAt(0);
System.out.println("this is the user input " + guesses);
return(guesses);
}

设置扫描全局实例并实例化一次,这样可以降低数据泄露的风险。

private static Scanner scan = new Scanner(System.in);
public static char getUserresponseGuess(){
....
}

关于java - 根据用户输入在 1 到 100 范围内执行二分搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42342370/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com