当输入多组数据又没有结束条件时,该如何结束?

按照题目要求该如何改下面这段代码,这种没有任何结束条件的该如何跳出循环走外面的程序?希望有详细解说!

import java.util.Scanner;
 public class oj1632 {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner sc=new Scanner(System.in);
            int d=1;

            while(sc.hasNext()){
                
                Book b1=new Book(sc.next(),sc.nextDouble(),sc.nextInt());
                System.out.println("现有图书信息:"); 
                System.out.print("书号:"+d);
                d++;
                b1.put();
                System.out.println();
            }
            sc.close();
        }

    }
class Book{
    String name;
    double price;
    int qt;
    public Book(String name,double price,int qt){
        this.name=name;
        this.price=price;
        this.qt=qt;
    }
    public void put(){
        System.out.println("书名:"+name+" 价格:"+price+"元  "+qt+"册");
        
    }

}

img

img

18

因为是OJ题目,所以结束循环在这里应该是不需要考虑,因为OJ系统会自动产生一个结束信号让获取输入停止,例如输入CTRL+Z信号;

然后题目要求使用对象数组,所以可以定义一个较大的值来定义数组,如100;

然后其他代码不变,根据题目提示,可以增加一个静态变量用于产生每次输入的书籍的编号,一个静态变量用于记录所有书籍的总册数,增加这两个变量的相应操作;

最后,获取输入后,再统一显示输入的信息即可。

修改如下:

参考链接:


https://zhidao.baidu.com/question/570207391256868884.html

import java.util.Scanner;
 public class oj1632 {
 
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner sc=new Scanner(System.in);
            int d=1;
           //  https://blog.csdn.net/weixin_43717536/article/details/125934048
            Book[] bs = new Book[100];  // 题目要求定义对象数组,所以这里假定最多输入100次书籍信息
            int i=0;  // 对象数组下标变量
            
 // https://zhidao.baidu.com/question/570207391256868884.html
            while(sc.hasNext()){
                
                Book b1=new Book(sc.next(),sc.nextDouble(),sc.nextInt());
                bs[i]=b1;  // 把利用输入的书籍信息创建的对象,赋值给对象数组相应的元素
                i++;  // 指向下一个对象数组元素
//                System.out.print("书号:"+d);
//                d++;
               // b1.put();
                //System.out.println();
            }
            sc.close();
            
            if(i>0) { // 如果输入的图书信息次数大于0,则输出输入的图书信息
                // 打印输入的所有图书信息
                System.out.println("现有图书信息:");
                for(int j=0;j<i;j++) {
                    bs[j].put();
                }
                // 打印总册数
                System.out.println("共有图书"+bs[0].AllQt+"册");
            }
            
        }
        
        
        
        
    }
class Book{
    String name; // 书名
    double price; // 价格
    int id;  // 编号
    int qt;   // 册数
    static int idCreater;  // 静态成员变量,用于给书指定编号
    static int AllQt;  // 所有书籍的总册数

    public Book(String name,double price,int qt){
        this.name=name;
        this.price=price;
        this.id = ++idCreater;  // 利用静态变量给输入的一次书籍指定编号
        this.qt=qt;  
        AllQt+=qt;  // 把此输入的书籍册数累加到总册数中
    }
    public void put(){
        System.out.println("书号:"+id+" 书名:"+this.name+" 价格:"+this.price+"元  "+qt+"册");
        
    }
 
}

img

回答:你可以选择采用nextline获取输入,然后采用split分割,这样,当你发现获取到的输入为空,就知道输入结束了,刚好符合题目的要求