boolean yn = true;
while(yn)
{
System.out.println("please enter your name");
char name = (char) System.in.read();
switch(name)
{
case 'y':
yn = false;
break;
case 'Y':
yn = false;
break;
case 'n':
yn = false;
break;
case 'N':
yn = false;
break;
default:
System.out.println("You did not input a correct choice");
}
当我输入除y
或n
以外的其他键时,多个相同输出不断出现。有什么建议么?我只想看到一个输出,System.in.read()
是必须的。不是扫描仪。
答案 0 :(得分:2)
您正在使用System.in.read()
读取下一个字符,但是当您键入一个字符并按Enter键时,实际上是在输入三个字符:您键入的字符,一个回车符('\ r')和换行符('\ n')。我假设您使用的是Mac,因为Windows计算机仅使用换行符。
由于您处于while
循环中,因此它将一直保持读取状态,直到您遇到将yn
设置为true
的有效字符为止。
您可以考虑使用Scanner
来简化此操作。
答案 1 :(得分:0)
无限循环的原因是您从char
读取输入并将其转换为System.in.read()
。
-1
将在输入流结束时返回代码char
。如果将其转换为65535
,则值为char name = (char) System.in.read();
。
因此,请在以下位置添加这段代码:
System.out.println("name="+name);
char next = (char)System.in.read();
if(next==65535)
break;
export declare interface ChartModel {
id: string,
name: string,
option: EChartOption
}
@Injectable({
providedIn: 'root'
})
export class FirebaseService {
constructor(private db: AngularFirestore) {
}
getCharts() {
return this.db.collection('charts').snapshotChanges();
}
createChart(chart: ChartModel) {
return this.db.collection('charts').add(chart);
}
updateChart(chart: ChartModel) {
delete chart.id;
return this.db.doc('charts/' + chart.id).update(chart);
}
}
此代码对我有用。 https://ideone.com/ppk3Fi
答案 2 :(得分:0)
这是我对此的看法。 改用Scanner类。
Scanner scanner = new Scanner (System.in);
System.out.println("please enter your name");
char name = scanner.next().charAt(0);
我会改为输入第一个字符。