You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:
red

Bottles 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:47:11