为什么输出保持相同数量的输出?

时间:2019-02-27 02:11:06

标签: java

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");
            }

当我输入除yn以外的其他键时,多个相同输出不断出现。有什么建议么?我只想看到一个输出,System.in.read()是必须的。不是扫描仪。

3 个答案:

答案 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);

我会改为输入第一个字符。