有一个逻辑问没搞明白,求教

豆芽炒粉丝 2015-07-24 09:04:43
如果满足则执行上传操作。
public final static String[] exts = { "jpg", "png", "gif" };

for (String e : exts) {
if (!ext.equals(e)) {
return false;
}
}
return true;

这个判断句中,我上传的文件后缀是jpg,如果不存在于exts中,则返回false ,最终返回true,这么一说的话,jgp存在于exts中,那么结果返回的是true,那么就能执行上传操作了,但我打印出b的值之后确是false,不知道为什么
if (b) {
fos = new FileOutputStream(new File(PATH + "/img/" + fname));
System.out.println(PATH + "/img/" + fname);
fos.write(is, 0, is.length);
...全文
130 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
王子文龙 2015-07-24
  • 打赏
  • 举报
回复
引用 2 楼 dingchenxixi 的回复:
自己搞明白了,是因为for-each语句的原因,会依次向下执行,jgp会与jpg,png,img等格式对比,而jpg与png,img不一样,这样就会返回false了
你应该创建一个标志位来表示是否存在,存在返回true,不存在继续遍历直到数组最后一个值,此时如果还不存在才应该返回false,简单点你创建一个List代替数组,判断元素是否存在不容易吗
  • 打赏
  • 举报
回复

for (String e : exts) {
            if (ext.equals(e)) {
                return true;
            }
        }
        return false;
明显逻辑反了 遍历里判断true 如果没有就返回false
豆芽炒粉丝 2015-07-24
  • 打赏
  • 举报
回复
引用 3 楼 nicholasbobo 的回复:
你这样判断有问题,你是判断数组里的每个元素都必须同传进来的后缀相同才能返回true,其中有一个不同都会返回false,正确的写法应该是
for (String e : exts) {
            if (ext.equals(e)) {
                return true;
            }
        }
return false;
我自己也发现了,刚开始没想通呢
豆芽炒粉丝 2015-07-24
  • 打赏
  • 举报
回复
引用 1 楼 rui888 的回复:
debug 调试吧。代码不全猜不出来哪里 的原因。不知的 你的b 是怎么来的。
b是一个boolean变量 而b是检查文件类型的 也就是for-each那条语句
nicholasbobo 2015-07-24
  • 打赏
  • 举报
回复
你这样判断有问题,你是判断数组里的每个元素都必须同传进来的后缀相同才能返回true,其中有一个不同都会返回false,正确的写法应该是
for (String e : exts) {
            if (ext.equals(e)) {
                return true;
            }
        }
return false;
豆芽炒粉丝 2015-07-24
  • 打赏
  • 举报
回复
自己搞明白了,是因为for-each语句的原因,会依次向下执行,jgp会与jpg,png,img等格式对比,而jpg与png,img不一样,这样就会返回false了
tony4geek 2015-07-24
  • 打赏
  • 举报
回复
debug 调试吧。代码不全猜不出来哪里 的原因。不知的 你的b 是怎么来的。

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧