JAVA aprendiendo desde cero-pre02
tarea 1
Tema Descripción
Construya una clase de conjunto de libros para representar un conjunto de libros compuesto por varios libros. La clase de conjunto de libros debe contener atributos: título del libro, precio unitario (el precio unitario se refiere al precio de un solo libro en una serie) y la cantidad de libros que contienen un solo libro (estipulamos que el precio unitario de cada libro de la serie es el mismo). El programa correspondiente que debe completarse puede consultar el nombre, el precio unitario, la cantidad y el precio total de la serie de libros. Un conjunto de libros se da al principio.
7 operaciones:
tipo | atributo | significado | producción |
---|---|---|---|
1/2/3 | ninguno | Consulta el nombre/precio unitario/cantidad de Bookset | Nombre correspondiente/precio unitario/cantidad |
4 | name |
El nombre del conjunto de libros cambió aname |
ninguno |
5 | price |
El precio del conjunto de libros cambió aprice |
ninguno |
6 | num |
La cantidad del conjunto de libros cambió anum |
ninguno |
7 | ninguno | Consulta el precio total de Bookset | Un flotador que representa el precio total |
Aviso
- Los números de coma flotante son de doble precisión y los enteros son largos.
respuesta
Como primera pregunta, la investigación es crear una nueva clase y una clase de encapsulación. Puede ver que las primeras 6 operaciones son los setters y getters correspondientes a los 3 atributos. Esto puede generarse directa y automáticamente por pereza:
Haga clic en la variable para generar el setter y el getter Alt+Insert
y haga clic en Generar.
De esta manera, se han completado las primeras 6 operaciones y se puede agregar un método para devolver el precio total.
En términos generales, no hay trampas, lo principal es estar familiarizado con la sumisión. Aquí utilizo un gadget exclusivo de Slacker (Github Desktop), clono directamente el almacén correspondiente de gitlab en el local, luego copio y pego el código (archivo .java) en la carpeta que acaba de clonar, y finalmente confirmo y presiono. (La interfaz gráfica es realmente fragante)
También está el estilo del código, puede usarlo primero para cada archivo Ctrl+Alt+L
, y se ajustará automáticamente (el número de líneas y los límites de palabras deben cambiarse usted mismo), y luego use checkstyle para cambiarlo.
tarea 2
Tema Descripción
Para crear varias estanterías:
- Cada estante puede almacenar varios juegos de libros.
- Puede realizar las operaciones correspondientes en la serie de libros en la estantería
El funcionamiento es el siguiente:
- Pregunte por el precio del libro más caro en un estante
- Pregunte el precio total de todos los libros en una estantería determinada (tenga en cuenta que el precio total no es la suma de los precios unitarios, el precio total está relacionado con la cantidad de libros de la serie)
- Agregar un conjunto de libros a un estante
- Quitar un conjunto de libros de un estante.
Aviso
Necesita usar BigDecimal, BigInteger, preste especial atención al precio total escrito en task1 también debe reemplazarse con BigDecimal
respuesta
Cree una nueva clase Bookshelf, cree un contenedor dentro (puede usar Hashmap) para almacenar Bookset e implemente 4 métodos de operación en la clase Bookshelf. Cree otro contenedor en main para mantener Bookshelf como nuestra biblioteca.
ArrayList<Bookshelf> lib = new ArrayList<Bookshelf>();
for (int i = 0; i < n; i++) {
Bookshelf bookshelf = new Bookshelf();
lib.add(bookshelf);
}//别忘了初始化添加n个书架
Al consultar una determinada estantería, utilícela lib.get(i - 1)
para operar en la i-ésima estantería. (Tenga en cuenta que las estanterías comienzan desde el número 1)
tarea3
Tema Descripción
- Crea diferentes clases de series de libros. serie de libros debe
- conforme a una cierta relación de herencia
- Equipado con método de consulta de información.
- Cree una clase de biblioteca unificada para administrar instancias de series de libros. La clase de estantería debe
- Equipado con los métodos correspondientes para agregar series , eliminar series y consultar series
La serie se divide en tres categorías, Arte (texto), Ciencia (razón) y Otros. La categoría Arte se subdivide en Novela, Poesía y OtrosA. La ciencia se divide en Matemáticas, Informática y Otros.
tipo de libro | Atributos | tipo de atributo |
---|---|---|
Otro | Igual que la clase base Bookset | Igual que la clase base Bookset |
OtroA | Incluyendo todas las propiedades de Bookset, la edad mínima de lectura recién agregada | Los atributos originales de Bookset permanecen sin cambios, la edad es un número entero |
Novedoso | Incluyendo todos los atributos de OtroA, la bandera de meta recién agregada | La propiedad original de OtherA permanece sin cambios, finish es de tipo booleano |
Poesía | Incluya todos los atributos de OtroA, agregue el nuevo autor autor | Los atributos originales de OtroA permanecen sin cambios y el autor es una cadena |
Otros | Incluyendo todas las propiedades de Bookset, año de publicación recién agregado | Los atributos originales de Bookset permanecen sin cambios y el año es un número entero |
Matemáticas | Incluyendo todos los atributos de OtherS, grado de uso recién agregado | El atributo original de OtherS permanece sin cambios y la calificación es un número entero |
Computadora | Incluyendo todos los atributos de OtherS, tipo profesional recién agregado | Los atributos originales de OtherS permanecen sin cambios y el tipo profesional es una cadena |
Las operaciones que deben implementarse son:
tipo | atributo | significado | producción |
---|---|---|---|
1 | i name |
La información de la serie del i título del libro en el estante con el número de consultaname |
Todas las propiedades de la serie, cada elemento está separado por un espacio (de acuerdo con el orden de entrada) |
2 | i |
i ¿Cuántas series de libros hay en la estantería del número de consulta? |
un entero |
3 | i |
i El número total de libros en el estante del número de consulta |
un entero |
4 | i type name price num var1 var2 (sin nueva línea) |
Mueva a i la estantería No. la serie de libros cuyo tipo es type , el nombre del libro name , el precio unitario es price y el número total es num (puede tener atributos var1, var2) |
ninguno |
5 | i name |
Eliminar serie titulada del i número de estantename |
Un número entero que representa el número total de libros que quedan en el estante después de ser retirados de la serie. |
respuesta
- patrón de fábrica
El uso del modo de fábrica es en realidad para encapsular la construcción de varias clases de Bookset en una nueva clase BookFactory con un interruptor, que se usa especialmente para la producción de Bookset.
public class BookFactory {
public static Bookset getBookset(String type, String name, double price, long num,String var1, String var2) {
switch (type) {
case "Other": return new Other(name,price,num);
case "OtherA": return new OtherA(name,price,num,Integer.parseInt(var1));
case "OtherS": return new OtherS(name,price,num,Integer.parseInt(var1));
case "Novel":
return new Novel(name,price,num,Integer.parseInt(var1),Boolean.parseBoolean(var2));
case "Poetry": return new Poetry(name,price,num,Integer.parseInt(var1),var2);
case "Math":
return new Math(name,price,num,Integer.parseInt(var1),Integer.parseInt(var2));
case "Computer": return new Computer(name,price,num,Integer.parseInt(var1),var2);
default: return null;
}
}
}
Aquí paso directamente todos los parámetros en forma de cadenas y, después de cambiar, convierto var1 y var2 al formato requerido para diferentes conjuntos de libros.
En Main, se adopta el método de leer una línea de cadenas a la vez, y luego la línea se divide por división:
String inputtext = scanner.nextLine();
String[] values = inputtext.split(" ");//使用时直接写values[i]并转为相应的格式
Para var1 y var2, solo necesita juzgar la longitud de los valores.
- relación de herencia
Reemplace Bookset con una clase abstracta y agregue una propiedad BookType y un método toString (esto se implementa mediante subclases)
private Booktype booktype;
public abstract String toString();
Luego Arte, Ciencia, Otros heredan Bookset; Novela, Poesía y OtrosA heredan Arte; Matemáticas, Informática y Otros heredan Ciencias. Agregue sus atributos únicos e implemente el método toString en cada subclase.
tarea4
Tema Descripción
tipo | anormal | producción |
---|---|---|
1 | i name Un libro con título no existe en un estante no vacío |
¡Oh, no! no name tenemos |
1 2 3 | i No. la estantería está vacía |
¡Oh, no! Esto está vacío. |
4 | i Ya existe name un libro con título en el estante número |
¡Oh, no! El name existir. |
5 | i name El libro con título no existe en el número de estantería |
mei tu wo zhen mei tu. |
Aviso
El formato de entrada del tema no necesariamente tiene que ser ingresado exactamente de acuerdo con el formato, y puede haber una entrada de parámetros redundante.
respuesta
Aquí lanzo una excepción directamente (
Por ejemplo
int length = booksetlist.size();
if (length == 0) {
throw new Exception("Oh, no! This is empty.");
}
Luego intente atrapar en main.
En segundo lugar, de acuerdo con el método de entrada de mi tarea3, no importa cuántos parámetros se ingresen más tarde, no tiene nada que ver conmigo.
tarea5
Tema Descripción
Se agregó la operación de combinación de estantería:
tipo | atributo | significado | producción |
---|---|---|---|
6 | i j |
Combinar i la estantería numerada la estantería numeradaj |
Un número entero que representa el número de la nueva estantería |
respuesta
Agregue compareTo y clone a Bookset, e impleméntelo por subclases, como la comparación de Poesía:
@Override
public Boolean compareTo(Bookset bs) {
if (bs.getBooktype() != this.getBooktype()) {
//如果比较的Bookset类型都不一样的话肯定不是一种书
return false;
}
Poetry p = (Poetry) bs;
return super.compareTo(bs) && p.getAuthor().equals(this.author);
}
Puede fusionarlos más tarde.