Java 使用用户输入在1到100范围内执行二进制搜索
我正在运行一个二进制搜索程序,该程序将用户输入字符“l”表示低“h”表示高,“c”表示值是否正确。我的第一个方法返回字符 我的中点法只是读取输入的第一个字符。如果我从50开始,按“h”,中点会正确上升到75,但我无法让程序读取“l”,并再次将值降低到50。程序只读取用户输入的第一个字符,但我需要更新应答中的值。我的while循环是错误的还是我的决策声明?多谢各位Java 使用用户输入在1到100范围内执行二进制搜索,java,search,binary,Java,Search,Binary,我正在运行一个二进制搜索程序,该程序将用户输入字符“l”表示低“h”表示高,“c”表示值是否正确。我的第一个方法返回字符 我的中点法只是读取输入的第一个字符。如果我从50开始,按“h”,中点会正确上升到75,但我无法让程序读取“l”,并再次将值降低到50。程序只读取用户输入的第一个字符,但我需要更新应答中的值。我的while循环是错误的还是我的决策声明?多谢各位 import java.util.Scanner; public class PlayGuessingGame { publ
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);
}
}
import java.util.Scanner;
公共课猜谜游戏{
公共静态字符getUserresponseGuess(){
扫描仪扫描=新扫描仪(System.in);
字符猜测=scan.next().charAt(0);
System.out.println(“这是用户输入”+猜测);
返回(猜测);
}
公共静态int getmiddoint(int低,int高){
中间;
//中点为高+低除以2
中等=(低+高)/2;
System.out.println(“是”+中间);
char-answer=getUserresponseGuess();
System.out.println(“这是答案”+答案);
//char get_input=getUserresponseGuess();
//System.out.println(“这是输出”+获取输入);
虽然(低您在这里有一些错误。我将尝试回答每个问题,但我可能会错过一些,如果我错过了一个,请突出一些。
让我们看看这个循环,只有注释更具可读性
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 == 'c'){
System.out.println("congrats!");
return(middle);
}
转换
你可以用开关代替这三种情况,这样会更干净
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()){
...
}
扫描仪
好的,您不应该每次都创建一个新的扫描仪实例,您在读取值的方法中所做的是:
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);
}
设置scan
全局实例并将其实例化一次,这将降低数据泄漏的风险
private static Scanner scan = new Scanner(System.in);
public static char getUserresponseGuess(){
....
}
你在这里有一些错误。我将尝试回答每个问题,但我可能会错过一些,请突出一些,如果我错过了一个。
让我们看看这个循环,只有注释更具可读性
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 == 'c'){
System.out.println("congrats!");
return(middle);
}
转换
你可以用开关代替这三种情况,这样会更干净
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()){
...
}
扫描仪
好的,您不应该每次都创建一个新的扫描仪实例,您在读取值的方法中所做的是:
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);
}
设置scan
全局实例并将其实例化一次,这将降低数据泄漏的风险
private static Scanner scan = new Scanner(System.in);
public static char getUserresponseGuess(){
....
}
我如何请求并接受每个输入?我不明白为什么输入为“h”时它才循环@reubs这根本不是循环。您只需在if中调用getUserresponseGuess
两次(答案==“h”)
给你一个循环的假象。但是当你有一个return
语句时,你不能循环。我编辑了一点,你可以看到Evaluate
和loop中的问题吗?
我如何请求和接受每个输入?我不明白为什么只有当输入为“h”时才循环@reubs这不是循环你只需在if(answer='h')
中调用getUserresponseGuess
两次,给你一个循环的错觉。但是当你有return
语句时,你就不能循环了。我编辑了一点,你可以在Evaluate
和循环与否?