Java 尝试执行简单操作时出现Nullpointerexception
我整个晚上都在写一部分代码,现在我陷入了一个无法摆脱的nullpointerexception 代码应该以如下格式读取文件中的所有内容: 有问题的列车线 那条铁路线上的每个车站 并将其保存到hashmap中的对象中 我真的不知道它是否真的保存了对象,但我确实检查了特定的键(站点的名称是站点地图中的键),它们确实存在,所以一定是对的 发生的代码部分是if语句后的第二行:Java 尝试执行简单操作时出现Nullpointerexception,java,nullpointerexception,hashmap,Java,Nullpointerexception,Hashmap,我整个晚上都在写一部分代码,现在我陷入了一个无法摆脱的nullpointerexception 代码应该以如下格式读取文件中的所有内容: 有问题的列车线 那条铁路线上的每个车站 并将其保存到hashmap中的对象中 我真的不知道它是否真的保存了对象,但我确实检查了特定的键(站点的名称是站点地图中的键),它们确实存在,所以一定是对的 发生的代码部分是if语句后的第二行: for (int i = 0; i < fraLinjeListe.size(); i++) {
for (int i = 0; i < fraLinjeListe.size(); i++) {
for (int j = 0; j < tilLinjeListe.size(); j++) {
if(fra.linjeList.get(i).equals(til.linjeList.get(j))){
Linje aktuellLinje=linjerMap.get(fra.linjeList.get(i));
tilStasjonsNummer=aktuellLinje.stasjonsNummer(til);
fraStasjonsNummer=aktuellLinje.stasjonsNummer(fra);
retning=tilStasjonsNummer-fraStasjonsNummer;
endeStasjonsNavn=aktuellLinje.endestasjon(retning);
System.out.println("Ta T-bane linje " + aktuellLinje.linjeNummer + " fra " + startStasjon + " til " + sluttStasjon + " i retning " + endeStasjonsNavn + ". Estimert reisetid: " + tid);
}
}
}
代码的其余部分:
import java.util.*;
import java.io.*;
class Oblig5{
public static void main(String[] args){
Planlegger starten=new Planlegger();
starten.lesFil();
}
}
class Planlegger{
Scanner input=new Scanner(System.in);
HashMap<String, Linje> linjerMap=new HashMap<String, Linje>();
HashMap<String, Stasjon> stasjonerMap=new HashMap<String, Stasjon>();
void lesFil(){
Linje linjer;
Stasjon stasjoner;
String linjeLest="";
String aktuellLinje="";
String linjeNummer="";
char[] linjeNummerA;
int linjeNummerInt=0;
try{
Scanner innFil=new Scanner(new File("Rutetabell.txt"));
while(innFil.hasNextLine()){
linjeLest=innFil.nextLine().toLowerCase();
if(linjeLest.contains("linje")){
/* System.out.println("TESTILINJE"); */
//Bruker en string for linjenummeret her for å lette bruken av nummeret som key i HashMapen.
linjeNummerInt=Integer.parseInt(linjeLest.replaceAll("[\\D]", ""));
// linjeNummerA[0]=linjeLest.split("*linje* ").charAt(0);
// linjeNummer=linjeNummer[0];
linjeNummer=String.valueOf(linjeNummerInt);
linjer=new Linje(linjeNummer);
aktuellLinje=linjeNummer;
linjerMap.put(linjeNummer, linjer);
}else{
/* System.out.println("TESTISTASJON"); */
//Dersom ikke objektet finnes i hashmapen for stasjoner allerede, så lages objektet og lagres i HashMapen.
if(!stasjonerMap.containsKey(linjeLest)){
stasjonerMap.put(linjeLest, new Stasjon(linjeLest));
}
//Her henter jeg ut objektet vi lager over, og om det ikke lages fordi det allerede eksisterer så hentes det ut uansett.
stasjoner=stasjonerMap.get(linjeLest);
//Her brukes objektinformasjonen over til å registrere stasjonen i objektet
linjer=linjerMap.get(aktuellLinje);
linjer.registrerStasjoner(linjeLest, stasjoner);
stasjoner.registrerNyLinje(aktuellLinje, linjer);
}
}
innFil.close();
}catch(IOException e){
e.printStackTrace();
}
/* System.out.println("Test");
String sjekkHashmap=input.nextLine();
if(stasjonerMap.containsKey(sjekkHashmap)){
System.out.println("Det funker!");
} */
lesFraTil();
}
void lesFraTil(){
fraStasjon();
}
void fraStasjon(){
boolean sjekkStasjon=true;
while(sjekkStasjon){
System.out.println("Vennligst tast inn fra-stasjonen: ");
String startStasjon=input.next().toLowerCase();
if(stasjonerMap.containsKey(startStasjon)){
sjekkStasjon=false;
tilStasjon(startStasjon);
}else{
System.out.println("Stasjon ikke funnet.");
sjekkStasjon=true;
}
}
}
void tilStasjon(String startStasjon){
boolean sjekkStasjon=true;
while(sjekkStasjon){
System.out.println("Vennligst tast inn til-stasjonen: ");
String sluttStasjon=input.next().toLowerCase();
if(stasjonerMap.containsKey(sluttStasjon)){
sjekkStasjon=false;
beregnRuter(startStasjon, sluttStasjon);
}else{
System.out.println("Stasjon ikke funnet.");
sjekkStasjon=true;
}
}
}
void beregnRuter(String startStasjon, String sluttStasjon){
Stasjon til=stasjonerMap.get(startStasjon);
Stasjon fra=stasjonerMap.get(sluttStasjon);
ArrayList<Linje> fraLinjeListe=new ArrayList<Linje>(fra.linjeList);
ArrayList<Linje> tilLinjeListe=new ArrayList<Linje>(til.linjeList);
int tilStasjonsNummer, fraStasjonsNummer;
int retning;
double tid= 0.0;
String endeStasjonsNavn;
tilStasjonsNummer=0;
fraStasjonsNummer=0;
for (int i = 0; i < fraLinjeListe.size(); i++) {
for (int j = 0; j < tilLinjeListe.size(); j++) {
if(fra.linjeList.get(i).equals(til.linjeList.get(j))){
Linje aktuellLinje=linjerMap.get(fra.linjeList.get(i));
tilStasjonsNummer=aktuellLinje.stasjonsNummer(til);
fraStasjonsNummer=aktuellLinje.stasjonsNummer(fra);
retning=tilStasjonsNummer-fraStasjonsNummer;
endeStasjonsNavn=aktuellLinje.endestasjon(retning);
System.out.println("Ta T-bane linje " + aktuellLinje.linjeNummer + " fra " + startStasjon + " til " + sluttStasjon + " i retning " + endeStasjonsNavn + ". Estimert reisetid: " + tid);
}
}
}
}
}
class Linje{
String linjeNummer="";
HashMap<String, Stasjon> linjeStasjoner=new HashMap<String, Stasjon>();
int antallStasjoner=0;
int type=0;
ArrayList<Stasjon> stasjonsList=new ArrayList<Stasjon>();
Linje(String linjeNummer){
this.linjeNummer=linjeNummer;
int linjeNummerInt=Integer.parseInt(linjeNummer);
if (linjeNummerInt < 10 ){
type=0;
}else{
type=1;
}
}
void registrerStasjoner(String linjeLest, Stasjon stasjon){
linjeStasjoner.put(linjeLest, stasjon);
stasjonsList.add(stasjon);
antallStasjoner++;
}
int antall=stasjonsList.size();
boolean inneholder(Stasjon stasjon){
boolean sannhetsSjekk=true;
if(stasjonsList.contains(stasjon)){
sannhetsSjekk=true;
}else{
sannhetsSjekk=false;
}
return sannhetsSjekk;
}
String endestasjon(int retning) {
String endestasjonen;
if (retning > 0) {
endestasjonen=stasjonsList.get(0).stasjonNavn;
return endestasjonen;
}else{
endestasjonen=stasjonsList.get(antall-1).stasjonNavn;
return endestasjonen;
}
}
int stasjonsNummer (Stasjon s) {
int selveNummeret=0;
for (int i = 0; i < stasjonsList.size(); i++) {
if (stasjonsList.get(i) == s) {
selveNummeret=i+1;
}
}
return selveNummeret;
}
}
class Stasjon{
String stasjonNavn;
Linje linje;
HashMap <String, Linje> stasjonsLinjer=new HashMap<String, Linje>();
ArrayList<Linje> linjeList=new ArrayList<Linje>();
int teller=0;
Stasjon(String linjeLest){
this.stasjonNavn=linjeLest;
}
void registrerNyLinje(String aktuellLinje, Linje linje){
stasjonsLinjer.put(aktuellLinje, linje);
linjeList.add(linje);
teller++;
}
}
class Overgang{
Linje l1, l2;
Stasjon fra,til,bytte;
Planlegger planlegger;
}
import java.util.*;
导入java.io.*;
类别5{
公共静态void main(字符串[]args){
Planlegger starten=新的Planlegger();
starten.lesFil();
}
}
类刨削机{
扫描仪输入=新扫描仪(System.in);
HashMap linjerMap=新的HashMap();
HashMap statsJonerMap=新HashMap();
void lesFil(){
林杰林杰;
Stasjon stasjoner;
字符串linjeLest=“”;
字符串aktuellLinje=“”;
字符串linjeNummer=“”;
查林杰努梅拉;
int-linjeNummerInt=0;
试一试{
Scanner innFil=新扫描仪(新文件(“Rutetabell.txt”);
while(innFil.hasNextLine()){
linjeest=innFil.nextLine().toLowerCase();
if(linjeLest.contains(“linje”)){
/*System.out.println(“TESTILINJE”)*/
//布鲁克为林杰努梅雷特准备了一条线,让她为我的哈斯马潘之家准备一条线。
linjeNummerInt=Integer.parseInt(linjeest.replaceAll(“[\\D]”,“);
//linjeNummerA[0]=linjeLest.split(“*linje*”).charAt(0);
//linjeNummer=linjeNummer[0];
linjeNummer=String.valueOf(linjeNummerInt);
linjer=新Linje(linjeNummer);
aktuellLinje=linjeNummer;
林杰尔地图(林杰努默,林杰尔);
}否则{
/*System.out.println(“TESTISTASJON”)*/
//在阿勒雷德州,我的目标是芬兰人,而在哈斯马潘州,我的目标是芬兰人。
如果(!statjonermap.containsKey(linjeest)){
statsjonermap.put(linjeest,新statsjon(linjeest));
}
//她的亨特·杰格(henter jeg ut objektet vi lager)结束了,她说,我的生活在乌恩塞特(uansett)附近。
stasjoner=stasjonerMap.get(linjeest);
//她的brukes对象信息在注册之前
linjer=linjerMap.get(aktuellLinje);
linjer.RegisterStatsJoner(Linjeest,StatsJoner);
国家登记处(aktuellLinje,linjer);
}
}
innFil.close();
}捕获(IOE异常){
e、 printStackTrace();
}
/*系统输出打印(“测试”);
字符串sjekkHashmap=input.nextLine();
if(statsjonermap.containsKey(sjekkHashmap)){
System.out.println(“Det funker!”);
} */
lesFraTil();
}
void lesFraTil(){
fraStasjon();
}
void fraStasjon(){
布尔值sjekkStasjon=true;
而(sjekkStasjon){
System.out.println(“弗拉斯塔佐宁文尼格斯特塔斯酒店:”);
字符串startStasjon=input.next().toLowerCase();
if(stasjonerMap.CONTANSKEY(startStasjon)){
sjekkStasjon=假;
tilStasjon(startStasjon);
}否则{
System.out.println(“Stasjon ikke funnet”);
sjekkStasjon=真;
}
}
}
void tilStasjon(字符串startStasjon){
布尔值sjekkStasjon=true;
而(sjekkStasjon){
System.out.println(“Vennligst tast inn til stasjonen:”);
String sluttStasjon=input.next().toLowerCase();
if(StatsJonerMap.containsKey(SluttStatsjon)){
sjekkStasjon=假;
beregnRuter(startStasjon、sluttStasjon);
}否则{
System.out.println(“Stasjon ikke funnet”);
sjekkStasjon=真;
}
}
}
void beregnuter(字符串开始,字符串结束){
Stasjon til=stasjonerMap.get(startStasjon);
Stasjon fra=stasjonerMap.get(sluttStasjon);
ArrayList fraLinjeListe=新的ArrayList(fra.linjeList);
ArrayList TilinjeList=新的ArrayList(直到linjeList);
int tilStasjonsNummer,fraStasjonsNummer;
整饰;
双tid=0.0;
字符串endeStasjonsNavn;
tilstatsjonsummer=0;
fraStasjonsNummer=0;
对于(int i=0;i import java.util.*;
import java.io.*;
class Oblig5{
public static void main(String[] args){
Planlegger starten=new Planlegger();
starten.lesFil();
}
}
class Planlegger{
Scanner input=new Scanner(System.in);
HashMap<String, Linje> linjerMap=new HashMap<String, Linje>();
HashMap<String, Stasjon> stasjonerMap=new HashMap<String, Stasjon>();
void lesFil(){
Linje linjer;
Stasjon stasjoner;
String linjeLest="";
String aktuellLinje="";
String linjeNummer="";
char[] linjeNummerA;
int linjeNummerInt=0;
try{
Scanner innFil=new Scanner(new File("Rutetabell.txt"));
while(innFil.hasNextLine()){
linjeLest=innFil.nextLine().toLowerCase();
if(linjeLest.contains("linje")){
/* System.out.println("TESTILINJE"); */
//Bruker en string for linjenummeret her for å lette bruken av nummeret som key i HashMapen.
linjeNummerInt=Integer.parseInt(linjeLest.replaceAll("[\\D]", ""));
// linjeNummerA[0]=linjeLest.split("*linje* ").charAt(0);
// linjeNummer=linjeNummer[0];
linjeNummer=String.valueOf(linjeNummerInt);
linjer=new Linje(linjeNummer);
aktuellLinje=linjeNummer;
linjerMap.put(linjeNummer, linjer);
}else{
/* System.out.println("TESTISTASJON"); */
//Dersom ikke objektet finnes i hashmapen for stasjoner allerede, så lages objektet og lagres i HashMapen.
if(!stasjonerMap.containsKey(linjeLest)){
stasjonerMap.put(linjeLest, new Stasjon(linjeLest));
}
//Her henter jeg ut objektet vi lager over, og om det ikke lages fordi det allerede eksisterer så hentes det ut uansett.
stasjoner=stasjonerMap.get(linjeLest);
//Her brukes objektinformasjonen over til å registrere stasjonen i objektet
linjer=linjerMap.get(aktuellLinje);
linjer.registrerStasjoner(linjeLest, stasjoner);
stasjoner.registrerNyLinje(aktuellLinje, linjer);
}
}
innFil.close();
}catch(IOException e){
e.printStackTrace();
}
/* System.out.println("Test");
String sjekkHashmap=input.nextLine();
if(stasjonerMap.containsKey(sjekkHashmap)){
System.out.println("Det funker!");
} */
lesFraTil();
}
void lesFraTil(){
fraStasjon();
}
void fraStasjon(){
boolean sjekkStasjon=true;
while(sjekkStasjon){
System.out.println("Vennligst tast inn fra-stasjonen: ");
String startStasjon=input.next().toLowerCase();
if(stasjonerMap.containsKey(startStasjon)){
sjekkStasjon=false;
tilStasjon(startStasjon);
}else{
System.out.println("Stasjon ikke funnet.");
sjekkStasjon=true;
}
}
}
void tilStasjon(String startStasjon){
boolean sjekkStasjon=true;
while(sjekkStasjon){
System.out.println("Vennligst tast inn til-stasjonen: ");
String sluttStasjon=input.next().toLowerCase();
if(stasjonerMap.containsKey(sluttStasjon)){
sjekkStasjon=false;
beregnRuter(startStasjon, sluttStasjon);
}else{
System.out.println("Stasjon ikke funnet.");
sjekkStasjon=true;
}
}
}
void beregnRuter(String startStasjon, String sluttStasjon){
Stasjon til=stasjonerMap.get(startStasjon);
Stasjon fra=stasjonerMap.get(sluttStasjon);
ArrayList<Linje> fraLinjeListe=new ArrayList<Linje>(fra.linjeList);
ArrayList<Linje> tilLinjeListe=new ArrayList<Linje>(til.linjeList);
int tilStasjonsNummer, fraStasjonsNummer;
int retning;
double tid= 0.0;
String endeStasjonsNavn;
tilStasjonsNummer=0;
fraStasjonsNummer=0;
for (int i = 0; i < fraLinjeListe.size(); i++) {
for (int j = 0; j < tilLinjeListe.size(); j++) {
if(fra.linjeList.get(i).equals(til.linjeList.get(j))){
Linje aktuellLinje=linjerMap.get(fra.linjeList.get(i));
tilStasjonsNummer=aktuellLinje.stasjonsNummer(til);
fraStasjonsNummer=aktuellLinje.stasjonsNummer(fra);
retning=tilStasjonsNummer-fraStasjonsNummer;
endeStasjonsNavn=aktuellLinje.endestasjon(retning);
System.out.println("Ta T-bane linje " + aktuellLinje.linjeNummer + " fra " + startStasjon + " til " + sluttStasjon + " i retning " + endeStasjonsNavn + ". Estimert reisetid: " + tid);
}
}
}
}
}
class Linje{
String linjeNummer="";
HashMap<String, Stasjon> linjeStasjoner=new HashMap<String, Stasjon>();
int antallStasjoner=0;
int type=0;
ArrayList<Stasjon> stasjonsList=new ArrayList<Stasjon>();
Linje(String linjeNummer){
this.linjeNummer=linjeNummer;
int linjeNummerInt=Integer.parseInt(linjeNummer);
if (linjeNummerInt < 10 ){
type=0;
}else{
type=1;
}
}
void registrerStasjoner(String linjeLest, Stasjon stasjon){
linjeStasjoner.put(linjeLest, stasjon);
stasjonsList.add(stasjon);
antallStasjoner++;
}
int antall=stasjonsList.size();
boolean inneholder(Stasjon stasjon){
boolean sannhetsSjekk=true;
if(stasjonsList.contains(stasjon)){
sannhetsSjekk=true;
}else{
sannhetsSjekk=false;
}
return sannhetsSjekk;
}
String endestasjon(int retning) {
String endestasjonen;
if (retning > 0) {
endestasjonen=stasjonsList.get(0).stasjonNavn;
return endestasjonen;
}else{
endestasjonen=stasjonsList.get(antall-1).stasjonNavn;
return endestasjonen;
}
}
int stasjonsNummer (Stasjon s) {
int selveNummeret=0;
for (int i = 0; i < stasjonsList.size(); i++) {
if (stasjonsList.get(i) == s) {
selveNummeret=i+1;
}
}
return selveNummeret;
}
}
class Stasjon{
String stasjonNavn;
Linje linje;
HashMap <String, Linje> stasjonsLinjer=new HashMap<String, Linje>();
ArrayList<Linje> linjeList=new ArrayList<Linje>();
int teller=0;
Stasjon(String linjeLest){
this.stasjonNavn=linjeLest;
}
void registrerNyLinje(String aktuellLinje, Linje linje){
stasjonsLinjer.put(aktuellLinje, linje);
linjeList.add(linje);
teller++;
}
}
class Overgang{
Linje l1, l2;
Stasjon fra,til,bytte;
Planlegger planlegger;
}
tilStasjonsNummer=aktuellLinje.stasjonsNummer(til);
Linje aktuellLinje=linjerMap.get(fra.linjeList.get(i));
for(Map.Entry entry : linjerMap)
{
System.out.println(linjerMap.getKey() + " ," +linjerMap.getValue() );
}