Member 11136294 Ответов: 1

Как выйти из цикла while с помощью CTRL D


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package lettergrades;

import java.util.Scanner;
/**
 *
 * @author user1
 */
public class LetterGrades {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int total = 0;
        int gradeCounter = 0;
        int aCount = 0;
        int bCount = 0;
        int cCount = 0;
        int dCount = 0;
        int fCount = 0;
        
        Scanner input = new Scanner(System.in);
        
        System.out.printf("%s%n%s%n%s%n%s%n ",
        "Enter the integer grades in the range 0-100",
        "Type the end-of-file indicator to terminate input",
        "On UNIX/LINUX/MACOS type <CMD> d then press Enter",
        "On WINDOWS type <CTRL> z then press Enter");
        
        do
        {            
            int grade = input.nextInt();
            total += grade;
            ++ gradeCounter;
            
            switch(grade/10)
            {
                case 9:
                case 10:
                    ++aCount;
                    break;
                case 8:
                    ++bCount;
                    break;
                case 7:
                    ++cCount;
                    break;
                case 6:
                    ++dCount;
                    break;
                default:
                    ++fCount;
                    break;
            }
            
        } while(input.hasNext());
        
       System.out.printf("%nGrade Report:%n");

       if (gradeCounter != 0)
       {
           double average = (double) total / gradeCounter;

           System.out.printf("Total of the %d grades entered is %d%n", gradeCounter, total);
           System.out.printf("Class average is %.2f%n", average);
           System.out.printf("%n%s%n%s%d%n%s%d%n%s%d%n%s%d%n%s%d%n", 
                   "Number of students who recieved each grade:",
                   "A: ",aCount,
                   "B: ",bCount,
                   "C: ",cCount,
                   "D: ",dCount,
                   "F: ",fCount);
       }
       else
           System.out.println("No grades were entered...");
    }
    
}


Что я уже пробовал:

Привет, я написал этот пример из JAVA, как программировать. Я пытался понять, почему CTRL D не завершает цикл и не переходит к System.out.printf("%nGrade Report:%n");. Я пробовал разные варианты петель, и это просто не работает. Если я включу вывод в цикл, он будет работать, но в идеале он будет работать только один раз, когда будет помещен вне цикла. Я знаю, что есть и другие способы сделать это, но я хотел бы, чтобы это работало так, как задумал автор. Заранее спасибо за любую помощь.

1 Ответов

Рейтинг:
11

Member 11136294

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package lettergrades;

import java.util.Scanner;
/**
 *
 * @author user1
 */
public class LetterGrades {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        String keepGoing = "yes";
        int total = 0;
        int gradeCounter = 0;
        int aCount = 0;
        int bCount = 0;
        int cCount = 0;
        int dCount = 0;
        int fCount = 0;
        
        Scanner input = new Scanner(System.in);
        
        System.out.printf("%s%n%s%n ",
        "Enter the integer grades in the range 0-100",
        "Enter 0 to end the program");
        
        do
        {            
            int grade = input.nextInt();
            total += grade;
            ++ gradeCounter;
            
            if(grade != 0)
            {
                switch(grade/10)
                {
                    case 9:
                    case 10:
                        ++aCount;
                        break;
                    case 8:
                        ++bCount;
                        break;
                    case 7:
                        ++cCount;
                        break;
                    case 6:
                        ++dCount;
                        break;
                    default:
                        ++fCount;
                        break;
                }
            }
            else
            {
                keepGoing = "no";
                break;
            }
            
        } while(keepGoing.equals("yes"));
        
       System.out.printf("%nGrade Report:%n");

       if (gradeCounter != 0)
       {
           double average = (double) total / gradeCounter;

           System.out.printf("Total of the %d grades entered is %d%n", gradeCounter, total);
           System.out.printf("Class average is %.2f%n", average);
           System.out.printf("%n%s%n%s%d%n%s%d%n%s%d%n%s%d%n%s%d%n", 
                   "Number of students who recieved each grade:",
                   "A: ",aCount,
                   "B: ",bCount,
                   "C: ",cCount,
                   "D: ",dCount,
                   "F: ",fCount);
       }
       else
           System.out.println("No grades were entered...");
    }
    
}