• 海乔的小微燕
    2019-06-03
    从GitHub下载的代码,直接拿到IDE运行总会报错,提示project sdk is not defined。请问该如何处理

    作者回复: 这个问题的原因是IntelliJ给JDK起名字起的不一样造成的. 比如说对于JDK 11, 有时候IntelliJ会把它叫做JDK_11, 有时候会带上小版本, 比如JDK_11.02这种. 更不用说JDK版本不一样的情况, 比如JDK_8.

    解决的方式就是选择IntelliJ里已有的JDK. 方法很多, 我举一个成功率比较高的例子.

    在File 菜单里选择Project Structure
    在弹出的窗口里, 左边Project Settings下面, 选择Project
    看到右边的面板, Project SDK 应该是红色报错对吧, 说找不到JDK之类的. 着时候可以在下拉菜单里选择一个自己的JDK就可以了.
    如果没有找到自己安装的JDK, 可以点击Edit, 然后点击面板上方的"+", 创建一个新的JDK. 目录就是JDK的安装目录.

     2
     4
  • 稍后重试
    2019-08-08
    配置了JDK,还是运行不起来,在IDEA左边的Project目录里面,“.java”文件前有一个红色圆中间是个字母J,同时有两条日志,小白求解答
    22:04    Сannot Run Git
    File not found: git.exe


    22:04    Invalid VCS root mapping
    The directory C:\Users…sktop\LetsJava-master is registered as a Git root, but no Git repositories were found there.
    展开

    作者回复: 两条错误日志是和代码版本控制相关的(git),和代码本身的错误没关系。

    可以按照我这个文章检查一下 JDK 的配置并尝试重新编译一下

    https://github.com/deepnighttwo/LetsJava/blob/master/FAQ/01%E7%AB%A0-%E5%A6%82%E4%BD%95%E5%9C%A8IntelliJ%20IDEA%E9%87%8C%E9%85%8D%E7%BD%AEJDK.md

    
     1
  • 纽扣很忙
    2020-01-20
    老师代码中消费者购物的判断没有做变更的动作,一直都是true,会导致输入商品数量后一直“ System.out.println("本店提供" + littleSuperMarket.merchandises.length + "种商品,请输入您要购买的商品编号:");加上让用户选择是否继续购物这个逻辑会比较好。

    作者回复: 好想法👍

    
    
  • Geek_3938b5
    2019-11-12
    老师帮忙看下,我想输入一个名字的字符串,但是系统不给我机会输入直接执行下一行了,最终得到的是一个空行。代码如下:
     System.out.println("欢迎光临" + dailyRunSuperMarket.name + ",本店地址在" + dailyRunSuperMarket.address + ",请问您叫什么名字?");
                customer.name = scanner.nextLine();
                System.out.println(customer.name);
                System.out.println("你好" + customer.name + ",请问是否会开车过来?");
                customer.byCar = scanner.nextBoolean();
    输出如下:
    欢迎光临小店,本店地址在嘉陵江路999号,请问您叫什么名字?

    你好,请问是否会开车过来?
    展开

    作者回复: 应该是前面有个回车换行符没有被消费掉。可以参考这个文章
    https://github.com/deepnighttwo/LetsJava/blob/master/FAQ/02%E7%AB%A0%20Scanner%E9%87%8CnextInt%E7%9A%84%E5%B0%8F%E5%9D%91.md

    也就是说scanner.nextBoolean();只会消费true或者false这几个字符,如果后面有回车换行符, 就不会被消费。如果后面来个nextLine,感觉上就是直接“跳过”,没有机会输入内容了。

    所以你这边的
                customer.name = scanner.nextLine();
    之前,应该有个scanner.nextXXX之类的,没有消费掉回车换行符。

    建议都使用scanner.nextLine();,对于boolean,可以使用Boolean.parseBoolean(scanner.nextLine().trim())

    
    
  • Geek_421d56
    2019-11-01
    再报个bug:totalCost += toBuy.count * toBuy.soldPrice应为totalCost += numToBuy * toBuy.soldPrice

    作者回复:
    已提交PR修正, 谢谢~

    https://github.com/geektime-geekbang/LetsJava/pull/3

    
    
  • 盛夏光年
    2019-10-11
    老师真的是太可爱了,还想到放一个小黄鸭。有时候我敲代码的时候,也会在检查时,自己给自己说代码。O(∩_∩)O哈哈~

    作者回复:
    这种方式很有用👍

    
    
  • 时间是最真的答案
    2019-06-26
    视频演示的 RunLittleSupperMarketAppMain2.java 中判断顾客钱是否带够有错误
    if (numToBuy * m.purchasePrice + totalCost > customer.money)
    这行代码应该这样写
    if (numToBuy * m.soldPrice+ totalCost > customer.money)

    作者回复: 老脸通红...... 买价卖价傻傻没有分清楚. 源代码里修正了. 谢谢帮忙活捉bug一只~

    https://github.com/deepnighttwo/LetsJava/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20Java%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B/09.%20%E6%89%93%E9%80%A0%E4%B8%80%E4%B8%AA%E5%B0%8F%E8%B6%85%E5%B8%82/code/src/com/geekbang/RunLittleSupperMarketAppMain2.java#L90-L91

    
    
我们在线,来聊聊吧