我必须制作一个在 2019 年 2 月星期一推出的程序,将该数据转换为例如 2019 年 2 月 5 日。其中 05 必须对应于 2019 年 2 月的第一个星期一。
现在,我正在尝试创建一个包含客户端计算机默认语言(在本例中为西班牙语)的 DayOfWeek 和 Month 枚举数据的类。
然后,我想创建另一个类,它调用另一个类的单个实例来验证他们输入的那一天对应于源语言中的某一天,因为我说西班牙语,我应该输入星期一,这应该返回它的工作原理。
我给你看两个代码:
package exercise8;
import java.time.DayOfWeek;
import java.time.Month;
import java.time.format.TextStyle;
import java.util.Locale;
public class SpanishsInfo {
/* Atributos */
/* Array que almacena los meses en español.*/
private String[] months;
/* Array que almacena los días en español.*/
private String[] days;
/* Constructor */
public SpanishsInfo() {
setArrays();
}
/* Getters */
public String[] getMonths() {
return months;
}
public String[] getDays() {
return days;
}
/* Inicializador de array para meses */
private void setArrays() {
byte i = 0;
/* Obtenemos la palabra para el idioma en el que se ejecuta el programa. */
Locale l = new Locale(Locale.getDefault().toLanguageTag());
/* Recorre el enum de los meses y los agrega al array month*/
for(Month m : Month.values()) {
months[i] = m.getDisplayName(TextStyle.FULL, l);
i++;
}
i = 0;
/* Recorre el enum de los días y los agrega al array days*/
for(DayOfWeek d : DayOfWeek.values()) {
days[i] = d.getDisplayName(TextStyle.FULL, l);
i++;
}
}
}
package exercise8;
import java.util.Arrays;
import java.util.Scanner;
import exercise8.ConsoleInput;
public class CheckWord {
/* Atributos */
/* Instancia un objeto de SpanishInfo para obtener los días y meses correctos. */
private static SpanishsInfo info = new SpanishsInfo();
/* Instancias para pedir por teclado. */
private static Scanner keyboard = new Scanner(System.in);
private static ConsoleInput kb = new ConsoleInput(keyboard);
/* Atributo global para devolver los días y meses. */
private static String result = null;
/* Constructor */
private CheckWord() {};
/* Inicio */
public static String getDay() {
do {
System.out.println("Introduzca un día de la semana: ");
/* Pide un día por teclado */
result = kb.readString().toLowerCase();
/* Comprueba que la palabra introducida esté dentro
* del array pasado. En caso contrario, vuelve a pedir el día. */
} while (Arrays.binarySearch(info.getDays(), result) > 0);
/* Si el día se encuentra dentro del array, se devuelve la palabra. */
return result;
}
}
我有一个带有 main 的 App 类,我所做的就是
String day = getDay();
先验一切都是进口的。当我启动程序时,我遇到以下问题:
Exception in thread "main" java.lang.ExceptionInInitializerError
at exercise8.App.main(App.java:11)
Caused by: java.lang.NullPointerException
at exercise8.SpanishsInfo.setArrays(SpanishsInfo.java:43)
at exercise8.SpanishsInfo.<init>(SpanishsInfo.java:21)
at exercise8.CheckWord.<clinit>(CheckWord.java:12)
... 1 more
我试图让一切都静止,因为我认为这是最好的方法。
有人可以告诉我我做错了什么吗?
非常感谢。
错误在这一行给你:
因为数组
months
在任何时候都没有初始化。所以它months
是空的,它会抛出一个异常,因为空数组位置不能被访问。你必须在某个时候做这样的事情:
(其中 MAX_MONTHS 将是数组的最大大小,我猜它将是 12)。
更多信息: