索千 2023-03-05 23:23 采纳率: 77.8%
浏览 30
已结题

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

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

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

  • 写回答

2条回答 默认 最新

  • a5156520 2023-03-06 09:33
    关注

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

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

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

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

    修改如下:

    参考链接:


    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月14日
  • 已采纳回答 3月6日
  • 创建了问题 3月5日

悬赏问题

  • ¥15 全志t113i启动qt应用程序提示internal error
  • ¥15 ensp可以看看嘛.
  • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 潜在扩散模型的Unet特征提取