Java:编译错误

标签 java compiler-errors

我使用两个类,但我运行:

C

姓名:雷吉斯

伊达德:25

出现

Exception in thread "main" java.lang.NullPointerException at registrosarraylist03xmlteste.RegistrosArrayList03_xmlteste.cadastrar(RegistrosArrayList03_xmlteste.java:72) at registrosarraylist03xmlteste.RegistrosArrayList03_xmlteste.main(RegistrosArrayList03_xmlteste.java:23) Java Result: 1

lista.remove(p); 不起作用

/*
 * ArrayList
 */
package registrosarraylist03xmlteste;

import com.thoughtworks.xstream.XStream;
import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

public class RegistrosArrayList03_xmlteste {

    public static void main(String[] args) {
        ArrayList listaPessoas = new ArrayList();

        // Menu
        char op;
        do {
            op = menu();
            switch (op) {
                case 'C':
                case 'c': // cadastrar
                    cadastrar(listaPessoas);
                    gravarXML(listaPessoas, "teste.xml");
                    break;
                case 'L':
                case 'l': // ler
                    lerXML("teste.xml");
                    break;
                case 'E':
                case 'e': // editar
                    Scanner in = new Scanner(System.in);
                    MyPessoas p1 = new MyPessoas();
                    System.out.print("Digite o ID: ");
                    p1.ID = in.nextInt();
                    System.out.print("Novo nome: ");
                    p1.nome = in.next();
                    System.out.print("Nova idade: ");
                    p1.idade = in.nextInt();
                    editar(listaPessoas, p1);
                    gravarXML(listaPessoas, "teste.xml");
                    listar(listaPessoas);
                    break;
                case 'R':
                case 'r': // remover
                    System.out.println("O comando Remover ainda nao esta pronto.");
                    break;
                default:
                    System.out.println("Opcao invalida.");
                    break;
            }
        } while (op != 'S' && op != 's');
    }

    static char menu() {
        System.out.println("\n ### MENU ### Selecione uma opcao, digitando a primeira letra.");
        System.out.println("Cadastrar  Listar  Editar  Remover  Sair");
        System.out.print("Opcao: ");
        Scanner in = new Scanner(System.in);
        return in.next().charAt(0);
    }

    static void cadastrar(ArrayList lista) {
        Scanner in = new Scanner(System.in);
        MyPessoas p = new MyPessoas();
        // ID gerado automaticamente.
        System.out.print("Nome: ");
        p.nome = in.nextLine();
        System.out.print("Idade: ");
        p.idade = in.nextInt();
        System.out.print("Fone: ");
        p.fone.fone=in.next();
        lista.add(p);
    }

    static void listar(ArrayList lista) {
        System.out.println("ID - Nome - Idade");
        for (int i = 0; i < lista.size(); i++) {
            // Obtem os dados da lista MyPessoas
            MyPessoas p = (MyPessoas) lista.get(i);
            System.out.println(p.ID + "  - " + p.nome + " - " + p.idade);
        }
    }

    static ArrayList lerXML(String filename) {
        XStream xstream = new XStream();
        File arquivo = new File(filename);
        ArrayList listaPessoas = (ArrayList) xstream.fromXML(arquivo);
        listar(listaPessoas);
        return listaPessoas;
    }

    static void gravarXML(ArrayList lista, String filename) {
        XStream xstream = new XStream();
        String xml = xstream.toXML(lista);
        GravarLer Gravar = new GravarLer();
        GravarLer.gravar(xml, filename);
    }

    static void editar(ArrayList lista, MyPessoas p1) {
        System.out.print("Digite o nome: ");
        for (int i = 0; i < lista.size(); i++) {
            // Obtem os dados da lista MyPessoas
            MyPessoas p = (MyPessoas) lista.get(i);
            if (p.ID == p1.ID) {
                p.nome = p1.nome;
                p.idade = p1.idade;
                break;
            }
        }
    }
//    static void remover(ArrayList lista, MyPessoas p1) {
//        // Obtem os dados da lista MyPessoas
//        MyPessoas p = new MyPessoas();
//        System.out.print("Digite o ID: ");
//        rmvID = in.nextInt();
//        lista.remove(p);
//    }
}



/*
 * Classe de MyPessoas
 */
package registrosarraylist03xmlteste;

public class MyPessoas {

    public static int lastID = 1;
    public int ID;
    public String nome;
    public int idade;
    public Fone fone;

    // Adiciona numeracao sequencial ao ID.
    public MyPessoas() {
        ID = MyPessoas.lastID++;
    }
}



package registrosarraylist03xmlteste;

public class Fone {

    public String fone;
}



/*
 * Grava e Le registros em arquivos XML.
 */
package registrosarraylist03xmlteste;

import java.io.File;
import java.io.FileWriter;
import java.util.Scanner;

public class GravarLer {

    static void gravar(String xml, String filename) {
        try {
            FileWriter w = new FileWriter(filename);
            w.write(xml);
            w.flush();
            w.close();
        } catch (Exception e) {
            System.out.println("Erro ao gravar XML: " + e);
        }
    }

    static String ler(String filename) {
        try {
            Scanner in = new Scanner(new File(filename));
            StringBuilder sb = new StringBuilder();
            while (in.hasNext()) {
                sb.append(in.next());
            }
            in.close();
            return sb.toString();
        } catch (Exception e) {
            System.out.println("Erro ao ler XML: " + e);
        }
        return "";
    }

}

最佳答案

您必须在 MyPessoas 类中初始化 Fone 属性。 在构造函数中添加:

fone = new Fone();

乍一看,这应该可以解决您的错误,但您可能需要进行其他更正。

关于Java:编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12666350/

相关文章:

c++ - 如何使用 Windows 10、64 位解决 Matlab R2018b 中的 C++ MEX 文件编译错误?

java - 同步ArrayList并发写入

java - 循环程序逻辑错误

compiler-errors - 这在编译时显示了一个奇怪的错误

xml - 输入字符串Junifer导入的NumberFormatException

python - PyCharm 可以列出项目中的所有 Python 错误吗?

java - 如何在Java代码中识别一个类和一个接口(interface)?

java - 如何关闭自动提交并使用@transactional 进行显式提交

java - 自定义 View 类中的监听器始终为空

c++ - 如何处理遗留代码中的方法名称重复