Не может принимать следующие входные данные после прочтения символа без добавления дополнительного readLine - PullRequest
0 голосов
/ 30 июня 2018

Необходимо добавить дополнительную строку "String x = in.readLine ();" после прочтения символа "sec = (char) in.read ();" в противном случае программа не будет продолжать принимать больше входных данных, см. комментарий ниже в коде. Обратите внимание, я не хочу использовать класс сканера.

import java.io.*;
class marks
{
public static void main(String args[])
{
    BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    int rl,m1,m2,m3,tot=0;
    String nm,cl;
    nm=cl="";
    char sec='A';
    double avg=0.0d;
    try
    {
        System.out.println("Enter the information of the student");
        System.out.print("roll no:");
        rl=Integer.parseInt(in.readLine());
    System.out.print("class:");
    cl=in.readLine();
    System.out.print("section:");
    sec=(char)in.read();
    String x=in.readLine();  /* have to add this line only then marks of 3 subject can be inputed */
    System.out.println("marks of three subjects "+x);
    m1=Integer.parseInt(in.readLine());
    m2=Integer.parseInt(in.readLine());
    m3=Integer.parseInt(in.readLine());
    tot=m1+m2+m3;
    avg=tot/3.0d;
    System.out.println("total marks of the students = "+tot);
    System.out.println("avg marks of the students = "+avg);
    }
    catch (Exception e)
    {};
}
} 

Ответы [ 3 ]

0 голосов
/ 30 июня 2018

1001 * решена *

import java.io.BufferedReader;
import java.io.InputStreamReader;

class Marks {
    public static void main(String args[]) {
        try (BufferedReader in = new BufferedReader(new InputStreamReader(System.in))) {
            int rl, m1, m2, m3, tot = 0;
            String nm, cl;
            nm = cl = "";
            char sec = 'A';
            double avg = 0.0d;
            System.out.println("Enter the information of the student");
            System.out.print("roll no:");
            rl = Integer.parseInt(in.readLine());
            System.out.print("class:");
            cl = in.readLine();
            System.out.print("section:");
            sec = in.readLine().charAt(0); //changes are here, instead of 
            // String x = in.readLine(); /* have to add this line only then marks of 3
            // subject can be inputed */
            System.out.println("marks of three subjects ");
            m1 = Integer.parseInt(in.readLine());
            m2 = Integer.parseInt(in.readLine());
            m3 = Integer.parseInt(in.readLine());
            tot = m1 + m2 + m3;
            avg = tot / 3.0d;
            System.out.println("total marks of the students = " + tot);
            System.out.println("avg marks of the students = " + avg);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Выход

Enter the information of the student
roll no:21
class:10
section:c
marks of three subjects 
56
65
56
total marks of the students = 177
avg marks of the students = 59.0
0 голосов
/ 30 июня 2018

Проблема в том, что вы используете in.read () в соответствии с документацией: «Читает один символ», но на самом деле вы набираете «два» символа: один символ и один «\ n», который хранится в буфере InputStreamReader и будет прочитан снова при использовании in.readLine ();

0 голосов
/ 30 июня 2018

Как насчет замены:

sec=(char)in.read();

с:

sec = in.readLine().charAt(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...