小白教程

 找回密码
 立即注册
查看: 10987|回复: 5

[已解决]找不到符号( readKeyBoard(1); )

[复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2021-5-29 03:52:39 | 显示全部楼层 |阅读模式
  1. public class Utility{
  2. private static Scanner scanner =new Scanner(System.in);
  3. /**
  4. 用于界面菜单的选择。该方法读取键盘,如果用户键入‘1’-‘4’中的任意字符,则方法返回。
  5. 返回值为用户键入字符。
  6. */
  7. public static char readMenuSelection(){
  8. char c;
  9. for ( ; ; ){
  10. String str = readKeyBoard(1);
  11. c = str.charAt(0);
  12. if (c != '1'&& c !='2' && c != '3' && c != '4'){
  13. System.out.print("选择错误,请重新输入:");
  14. }
  15. else {
  16. break;
  17. }
  18. }
  19. return c;
  20. }
  21. }
复制代码


最佳答案
2021-5-31 20:21:40
你那个readKeyBoard方法漏掉了一个false,应该是:readKeyBoard(1, false);为什么是这个?因为源于你自己写的方法(如下):
private static String readKeyBoard(int limit,boolean blankReturn) {
String line = "";
while (scanner.hasNextLine()) {
line = scanner.nextLine();
if(line.length() == 0) {
if(blankReturn) return line;
else continue;
}
if (line.length() < 1 || line.length() > limit) {
System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
continue;
}
break;
}
return line;
}

有了上面这个方法以后,你调readKeyBoard()方法时,第一个形参返回的才是int型,第二个形参返回的才是boolean型,也就是说当从键盘获取的字符长度小于1或者大于limit的时候,就返回false,返回false了就continue继续让用户输入,如果在范围内了那个boolean型就返回true,返回true了就继续返回输入字符的长度。所以你写的代码报错了,就是因为上面这个方法没用对。
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-5-30 04:20:07 | 显示全部楼层
说实话,你第二行就有问题了
Scanner类为什么要用private和static去修饰呢?
回复

使用道具 举报

1

主题

2

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2021-5-30 20:59:34 | 显示全部楼层
readKeyBoard是你定义的方法  你往下面继续看代码
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-5-31 08:18:53 | 显示全部楼层
你都没用到Scanner,怎么读取用户输入?
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-5-31 20:21:40 | 显示全部楼层 &
你那个readKeyBoard方法漏掉了一个false,应该是:readKeyBoard(1, false);为什么是这个?因为源于你自己写的方法(如下):
private static String readKeyBoard(int limit,boolean blankReturn) {
String line = "";
while (scanner.hasNextLine()) {
line = scanner.nextLine();
if(line.length() == 0) {
if(blankReturn) return line;
else continue;
}
if (line.length() < 1 || line.length() > limit) {
System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
continue;
}
break;
}
return line;
}

有了上面这个方法以后,你调readKeyBoard()方法时,第一个形参返回的才是int型,第二个形参返回的才是boolean型,也就是说当从键盘获取的字符长度小于1或者大于limit的时候,就返回false,返回false了就continue继续让用户输入,如果在范围内了那个boolean型就返回true,返回true了就继续返回输入字符的长度。所以你写的代码报错了,就是因为上面这个方法没用对。
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-6-1 09:59:22 | 显示全部楼层
  1. private static String readKeyBoard(int limit){
  2. String line = "";
  3. while(scanner.hasNext()){
  4. line = scanner.nextLine();
  5. if(line.length() < 1 || line.length() >limit){
  6. System.out.print("输入长度(不大于" + limit + ")错误,请重新输入: ");
  7. continue;
  8.            }
  9.            break;
  10. }
  11. return line;

  12. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|小白教程 ( 粤ICP备20019910号 )

GMT+8, 2024-11-24 13:02 , Processed in 0.025863 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表