按照题目要求该如何改下面这段代码,这种没有任何结束条件的该如何跳出循环走外面的程序?希望有详细解说!
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+"册");
}
}
18
因为是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+"册");
}
}
回答:你可以选择采用nextline获取输入,然后采用split分割,这样,当你发现获取到的输入为空,就知道输入结束了,刚好符合题目的要求