英文:
Compiler not recognizing that class string value is equal to another String value
问题
public class Station {
String name;
boolean pass;
int distance;
// 创建一个新的站点,接受名称、是否通行和距离作为参数
public static Station createStation(String name, boolean pass, int distance) {
Station station = new Station();
station.name = name;
station.pass = pass;
station.distance = distance;
return station;
}
// 包含伦敦所有站点的数组列表
static Station[] StationList = {
createStation("Stepney Green", false, 100),
createStation("Kings Cross", true, 700),
createStation("Oxford Circus", true, 200)
};
public static String infoAboutStation(Station station) {
String message;
if (station.pass)
message = "This station, " + station.name + ", is a London Underground Station.";
else
message = "This station, " + station.name + ", is not a London Underground Station.";
return message;
}
public static String checkInfo(String stationName) {
String info = null;
for (Station station : StationList) {
if (stationName.equals(station.name)) {
info = infoAboutStation(station);
break; // Exit the loop once a matching station is found
} else {
info = stationName + " is not a London Underground Station.";
}
}
return info;
}
public static void printInfo() {
Scanner scanner = new Scanner(System.in);
System.out.println("How many... ");
int totalResponses = Integer.parseInt(scanner.nextLine());
String choice;
for (int i = 0; i < totalResponses; ++i) {
System.out.println("Enter a station: ");
choice = scanner.nextLine();
System.out.println(checkInfo(choice));
}
}
// psvm(String[] args)
}
请注意,我已经对代码进行了一些修改:
-
在
createStation
方法中,我创建了一个新的Station
对象并设置了其属性,然后返回该对象。 -
在
infoAboutStation
方法中,我更改了消息的构建方式,以便更清晰地显示站点信息。 -
在
checkInfo
方法中,我使用了equals
方法来比较字符串,因为在Java中,使用==
比较字符串时,比较的是引用而不是内容。另外,我添加了一个break
语句,以便在找到匹配站点后退出循环。
这些修改应该解决你遇到的问题,并提高了代码的可读性和效率。
英文:
public class Station {
String name;
boolean pass;
int distance;
// method to create a new Station taking the arguments of the name,pass and distance in the parameter
public static Station createStation(String name, boolean pass, int distance) {
}
// Array list containing all the Stations in London we will use
static Station[] StationList = {createStation("Stepney Green", false, 100), createStation("Kings Cross", true, 700), createStation(
"Oxford Circus", true, 200)};
public static String infoAboutStation(Station station) {
String message;
if (station.pass)
message = //string message
else
message = //string message
return message;
}
public static String checkInfo(String stationName){
String info = null;
for(Station station : StationList){
if(stationName == station.name) { //it does not recognise it to be the same for some reason
info = stationName + infoAboutStation(station);
}
else
info = stationName + " message ";
}
return info;
}
public static void printInfo(){
Scanner scanner = new Scanner(System.in);
System.out.println("How many... ");
int totalResponses = Integer.parseInt(scanner.nextLine());
String choice;
for(int i = 0; i < totalResponses; ++i){
System.out.println("Enter a station: ");
choice = scanner.nextLine();
System.out.println(checkInfo(choice));
}
}
// psvm(String[] args)
}
So the program runs fine but when we use "Stepney Green", "Kings Cross", "Oxford Circus" as the input for choice at checkinfo(choice)
, it does not recognise it to be the same for stationName == station.name
in the method checkInfo(stationName //choice)
Intellij debugger reads this at stationName == station.name
-StationList = {Station[3]@980} -> 0 = {Station@994} 1 = {Station@997} 2 = {Station@998}
-static -> StationList = {Station[3]@980}
-stationName = "Stepney Green" value = {byte[13]@996} coder = 0 hash = 0 hashisZero = 0
-info = null
-station = {Station@994} -> name = "Stepney Green", pass = false, distance = 100
-station.name = "Stepney Green" -> value = {byte[13]@999] rest is zero
Beside the statement it says stationName: "Stepney Green" station: Station@994. Instead of printing out stationName + infoAboutStation it goes to the else station and prints "Stepney Green is not a London Underground Station". I am so puzzled as to why. Also if you don't mind helping me as to making this code a little more efficient and better.
答案1
得分: 0
你应该使用 equals()
方法来比较 String
。将这段代码进行替换:
if(stationName == station.name)
改为:
if(stationName.equals(station.name))
英文:
You should compare String
using equals()
Replace this
if(stationName == station.name)
by
if(stationName.equals(station.name))
答案2
得分: 0
**FIXED** 更改为
for(Station station : StationList){
if(stationName.equals(station.name)) {
info = stationName + infoAboutStation(station);
break;
}
}
谢谢您的帮助
英文:
FIXED changed to
for(Station station : StationList){
if(stationName.equals(station.name)) {
info = stationName + infoAboutStation(station);
break;
}
}
Thanks for the help
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论