40分qwq,到底怎么了
  • 板块P1317 低洼地
  • 楼主QAQ5
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/1/1 18:29
  • 上次更新2025/1/2 09:22:42
查看原帖
40分qwq,到底怎么了
749028
QAQ5楼主2025/1/1 18:29
import java.util.Scanner;

//编程真是太抽象了,让我无法思考,连个入门题都做不了。想不开完蛋,想开了就只是写得顺畅点而已。太麻烦了尽量写得直白简单,多一事不如少一事
public class Main {
    public static void main(String[] args) {
        //一个车子在路面上右移,上坡后下坡肯定是一个坑
        int count = 0;
        Cat cat = new Cat(new Scanner(System.in));//面向对象新建一个车子,没毛病吧?
        boolean hasUp = false;
        while (!cat.onEnd()/*车子没到底就一直移动*/) {
            if (!hasUp) {
                if (cat.rightMoveDirection == RightMoveDirection.up) hasUp = true;
            }/*虽然不懂为啥能省大括号的地方非要让用大括号,但这里不用“否则”会匹配错误*/ else if (cat.rightMoveDirection == RightMoveDirection.down) {
                count++;
                hasUp = false;
            }//这样写可以省掉代码替换,而且更好吧,但不容易想到吗
            cat.move();
        }
        System.out.println(count);//写得自己都看不懂,也不知道是怎么写出来的
        //调试也不会用,还是要肉眼找错和改代码测试
        //一直以来每次测试代码都是重新编译执行,这应该不是正常的,重复的那部分每次都无意义重复执行了,我学不到其他办法
        //程序这个词很简单,有循序的过程而已,不要这么离谱地坏吧
    }
}

//车子
class Cat {
    final Scanner explorer/*没错,这个是探索器,这名字没问题吧*/;
    int step = 0;//左外是零,那第一步在第一个位置,所以末尾就是长度。但第一次记左外零多余吗?
    final int roadLen;
    Integer point1, point2;//方向的根据点
    RightMoveDirection rightMoveDirection = RightMoveDirection.flat;
    private ReplaceableCode replaceableCode;

    Cat(Scanner scanner) {
        explorer = scanner;
        roadLen = scanner.nextInt();
        //但还是公开了不必要的scanner
        replaceableCode = () -> {
            point1 = explorer.nextInt();
            replaceableCode = () -> {
                point2 = explorer.nextInt();
                upDirection();
                replaceableCode = () -> {
                    point1 = point2;
                    point2 = explorer.nextInt();
                    upDirection();
                };
            };
        };
    }

    boolean onEnd() {
        return step == roadLen;
    }

    void move() {
        if (onEnd()) return;//这个好像只能每次判断了?
        replaceableCode.content();//但是还是要多一个从地址获取的过程?
        step++;
    }

    private void upDirection() {
        if (point1 < point2) rightMoveDirection = RightMoveDirection.up;
        else if (point1 > point2) rightMoveDirection = RightMoveDirection.down;
        else rightMoveDirection = RightMoveDirection.flat;
    }
}

//左移的方向
enum RightMoveDirection {
    up, flat, down//上坡,平移,下坡
}

//可替换代码。无法学习也无法自创的悲剧。这个到现在才这样写,而且也不是好方式
@FunctionalInterface
interface ReplaceableCode {
    void content();
}

2025/1/1 18:29
加载中...