Java葡萄酒类型搜索算法无结果,请求排查故障原因
葡萄酒类型搜索无结果的问题解决
问题背景
刚学Java,编写的葡萄酒类型搜索算法无法正常工作:将N个葡萄酒对象存入cantina数组后,根据用户输入的类型搜索匹配酒瓶,完全没有输出。此前用类似逻辑按年份搜索时,返回StringBuilder结果正常。
相关代码
搜索类型的方法
public StringBuilder StampaTipo(String t) { StringBuilder tipo= new StringBuilder(50); int i=0; for(i=0;i<this.cantina.length;i++) { if(this.cantina[i].getTipo()==t) { tipo.append(this.cantina[i].toString()); } } return tipo; }
主函数调用逻辑
System.out.println("\nInserisci il tipo da cercare: "); ricercaT=in.next(); System.out.println("\nBottiglie trovate: "+"\n"+c.StampaTipo(ricercaT));
实际输出
Insert the type of wine to find:
redBottles found:
问题原因
核心问题出在字符串比较方式:你用了==来对比葡萄酒类型字符串,但在Java中,==比较的是字符串对象的内存引用地址,而不是字符串的实际内容。用户输入的ricercaT和cantina数组中葡萄酒对象的getTipo()返回的字符串是两个不同的对象,哪怕内容完全一致,==也会返回false,导致匹配逻辑根本不会执行。
之前按年份搜索正常,是因为年份属于基本数据类型(如int),==直接比较的是值本身,不存在引用对比的问题。
解决方案
将==替换为equals()方法,该方法专门用于对比字符串的实际内容:
public StringBuilder StampaTipo(String t) { StringBuilder tipo= new StringBuilder(50); int i=0; for(i=0;i<this.cantina.length;i++) { // 用equals比较字符串内容 if(this.cantina[i].getTipo().equals(t)) { tipo.append(this.cantina[i].toString()); } } return tipo; }
可选优化
如果需要支持大小写不敏感的搜索(比如用户输入Red也能匹配red),可以改用equalsIgnoreCase():
if(this.cantina[i].getTipo().equalsIgnoreCase(t)) {
内容的提问来源于stack exchange,提问作者Lorelius Hogglefart
相关产品推荐
相关产品推荐

