package Library;
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Book [] bookForBorrow={new Book(1,"高数"),new Book(2,"线代"),new Book(3,"工数")
,new Book(4,"电路"),new Book(5,"模电"),new Book(6,"数电"),
new Book(7,"英语"),new Book(8,"毛概")};
System.out.println("欢迎使用图书馆借书系统!输入:1-按名称查找书籍 2-按序号查找书籍");
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
try{
if(i!=1 && i!=2){
throw new BadCommand("输入有误!请按提示输入数字命令");
}
if(i==1){
System.out.println("请输入图书名称:");
String name=sc.next();//就是这里总是出错!
int f=0;
for(Book book:bookForBorrow){
if(book.getBookname().equals(name)){
f=1;
String fName="book:"+name;
System.out.println(fName);
break;
}
}
if(f==0){
throw new NoExist("图书不存在!");
}
}else if(i==2){
System.out.println("请输入图书序号:");
int k=sc.nextInt();
int m=0;
for(int a=0;a<bookForBorrow.length;a++){
if(bookForBorrow[a].getOrderNum()==k){
String fname="book:"+bookForBorrow[a].getBookname();
System.out.println(fname);
m=1;
break;
}
}
if(m==0){
throw new NoExist("图书不存在!");
}
}
}catch(BadCommand e1){
System.out.println(e1.getMessage());
}
catch(NoExist e2){
System.out.println(e2.getMessage());
}
}
}
//测试
package Library;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入:");
String name=sc.next();//这里接收到的字符串又是对的。
Book [] bookForBorrow={new Book(1,"高数"),new Book(2,"线代"),new Book(3,"工数")
,new Book(4,"电路"),new Book(5,"模电"),new Book(6,"数电"),
new Book(7,"英语"),new Book(8,"毛概")};
for(int i=0;i<bookForBorrow.length;i++){
/*if(book.getBookname().equals(name)){
String fName="book:"+name;
System.out.println(fName);
break;*/
if(bookForBorrow[i].getBookname().equals(name)){
String fName="book:"+name;
System.out.println(fName);
break;
}
}
System.out.println("over!");
}
}补充一个我测试的代码,这个接收到的又是对的

如果没有任何调整时输入,光标位置不在最后 直接输入中文会有带刚才输入的中文


但是如果把光标在最后面点一下 然后再输入,就可以正常输入中文了 这应该是Eclipse的一个BUG 毕竟是国外的软件 对中文优化并不是很好 输入数字 英文好像就没这问题


你换成nextline呢?