m*****r 发帖数: 37 | 1 我是最近刚转Java的弱弱,有几个小问题,请牛牛们轻拍。
这次转java,总算像是某位说的那样,原来c++转java也就分分钟的事儿。写得顺的时
候,边google边写,也可以写得稀里糊涂、腾云架雾、行云流水;可问题是bug一出现
,立马歇菜!比如,min stack, stack1.peek()==stack2.peek(),顶上的两个数字明明
是相等的,为什么会return false呢?想去google都不知道该搜什么。。。等把java刷
一遍lc就算我可以写java了?
我有个function, public boolean dfdjdf(){return dfkld;} 为什么它一定要我在最
后一句话加个return啊,方法里的逻辑到那一步早就应该已经return了啊?
还有就是,刷lc搭了个local的架,本来没什么心理障碍,可是每遇到有Node,
ListNode, TreeNode的题就一股无名火,我不知道该把这些定义的类塞到哪里?试过两
种:
public class getIntersectionNode {
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public static class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if (headA == null || headB == null) {
return null;
}
ListNode p1 = headA;
ListNode p2 = headB;
while (p1 != null && p2 != null && p1 != p2) {
p1 = p1.next;
p2 = p2.next;
if (p1 == p2) return p1;
if (p1 == null) {
p1 = headB;
}
if (p2 == null) {
p2 = headA;
}
}
return p1;
}
}
public static void main(String[] args){
Solution result = new Solution();
ListNode a, b; // main不work
ListNode res = result.getIntersectionNode(a, b);
System.out.println(res);
}
}
这种main里面就不知道该怎么办了。
public class hasCycle {
public static class Solution {
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public ListNode ListNode(int x) {
ListNode res = new Solution.ListNode(-1);
res.val = x;
res.next = null;
return res;
}
public boolean hasCycle(ListNode head) {
if (head == null || (head != null && head.next == null)) //
special situation
return false;
else if (head != null && head.next == head)
return true;
ListNode fast = head;
ListNode slow = head;
while (fast != null && slow != null) {
slow = slow.next;
fast = fast.next.next; // 2X speed
while (fast != null && fast.next != null && slow != null &&
fast.val != slow.val) {
slow = slow.next;
fast = fast.next.next; // 2X speed
}
if (fast == null || fast.next == null || slow == null)
return false;
else if (fast != null && slow != null && fast.val == slow.
val)
return true;
else return false;
}
return false;
}
}
public static void main(String[] args){
Solution result = new Solution();
Solution.ListNode one = result.ListNode(1);
Solution.ListNode two = result.ListNode(1);
boolean res = result.hasCycle(one);
System.out.println(res);
}
}
这种可以用,就是main里每次Solution.不方便。
也试过package leetcode;但还是找不到我的node类,是因为我装java时路径没设对?
我想知道假如我想保留题目的名字作为类名,保留Solution因定类的话,有没有什么更
好的方法我可以方便用node类的?
想听大牛小牛牛牛们说句话,如果知道没什么更好的办法,也许我再不知道把它塞哪儿
的时候就不那么堵了。。。 | g*****g 发帖数: 34805 | 2 Try below, You can also move your TreeNode to a public class and you don't
need to define it everywhere. If your function returns a value, every
possible branch needs to have a return or throw exception clause.
public class Solution {
class TreeNode {
}
TreeNode a, b;
public Solution() {
//init your tree node
}
public void myCode() {
}
public static void main() {
new Solution().myCode();
}
} | m*****r 发帖数: 37 | 3 弄成这样的了:
// ./com/ListNode.java
package com;
public class ListNode {
public int val;
public ListNode next;
public ListNode(int x) {
val = x;
next = null;
}
}
// ./hasCycle.java
import com.ListNode;
public class hasCycle {
public static class Solution {
public boolean hasCycle(ListNode head) {
if (head == null || (head != null && head.next == null))
return false;
else if (head != null && head.next == head)
return true;
ListNode fast = head;
ListNode slow = head;
while (fast != null && slow != null) {
slow = slow.next;
fast = fast.next.next; // 2X speed
while (fast != null && fast.next != null && slow != null &&
fast.val != slow.val) {
slow = slow.next;
fast = fast.next.next; // 2X speed
}
if (fast == null || fast.next == null || slow == null)
return false;
else if (fast != null && slow != null && fast.val == slow.
val)
return true;
else return false;
}
return false;
}
}
public static void main(String[] args){
Solution result = new Solution();
ListNode one = new ListNode(1);
ListNode two = new ListNode(1);
one.next = two;
boolean res = result.hasCycle(one);
System.out.println(res);
}
}
这样算不算综结? ListNode类里我必须再加三个public对不对?
还没试过try...catch...throw exception 等我写几个例子再试试看.
【在 g*****g 的大作中提到】 : Try below, You can also move your TreeNode to a public class and you don't : need to define it everywhere. If your function returns a value, every : possible branch needs to have a return or throw exception clause. : public class Solution { : class TreeNode { : } : TreeNode a, b; : public Solution() { : //init your tree node : }
| v******y 发帖数: 84 | 4 Java是要确保你有return的值的,
即使所有的a都是大于0的,下面是不行的,因为compiler的判断是else的话,这个就没
有return了
if (a>0) return 1
必须
if (a>0) return 1;
return 1;
下面也是一样的
while(true){
return 1;
}
如果无法进入这个while loop,就没有return了,所以必须在while 后加上return
可以这么些
int ret=0;
while(true){
ret=1;
}
return ret;
Java判断equal, 如果a 和 b是object的话, 用a.equal(b),这个等同于c++ a==b,
是build in primitive type的话 java c++是一样的a==b
Java a==b是比较a 和 b的 是不是同一个object id, 即a和b是不是指向同一个object,
struct x{ int val;}
即使x的二个a, b是有相同的val,也是a!=b
但是a.val==b.val, 或a.equals(b),这是你要自己定义equals | B********r 发帖数: 397 | | m*****r 发帖数: 37 | 6 写java时没有pointer了,忽然就觉得脑袋好轻松,以后一直写java就再不用为pointer头
痛了...
这个return样例写得很好看,以后就这么写了.
可是看来我只写题目还是太肤浅了,还是得去读那两本书,我再好好去想想== O.equals(
O)
多谢大牛~~
【在 v******y 的大作中提到】 : Java是要确保你有return的值的, : 即使所有的a都是大于0的,下面是不行的,因为compiler的判断是else的话,这个就没 : 有return了 : if (a>0) return 1 : 必须 : if (a>0) return 1; : return 1; : 下面也是一样的 : while(true){ : return 1;
| m*****r 发帖数: 37 | 7 对入门级弱弱来说 这个怪物太吓人呀
等我再多熟悉之后再看吧
【在 B********r 的大作中提到】 : try scala.
| z****n 发帖数: 1933 | 8 stack1.peek()==stack2.peek()
Stack里Java会把primitive 数字box成对象。虽然2个数字相同,但是他们的ref指向不
同的内存区域。你可以把对象转回primitive,然后比较。Integer.intValue()
【在 m*****r 的大作中提到】 : 我是最近刚转Java的弱弱,有几个小问题,请牛牛们轻拍。 : 这次转java,总算像是某位说的那样,原来c++转java也就分分钟的事儿。写得顺的时 : 候,边google边写,也可以写得稀里糊涂、腾云架雾、行云流水;可问题是bug一出现 : ,立马歇菜!比如,min stack, stack1.peek()==stack2.peek(),顶上的两个数字明明 : 是相等的,为什么会return false呢?想去google都不知道该搜什么。。。等把java刷 : 一遍lc就算我可以写java了? : 我有个function, public boolean dfdjdf(){return dfkld;} 为什么它一定要我在最 : 后一句话加个return啊,方法里的逻辑到那一步早就应该已经return了啊? : 还有就是,刷lc搭了个local的架,本来没什么心理障碍,可是每遇到有Node, : ListNode, TreeNode的题就一股无名火,我不知道该把这些定义的类塞到哪里?试过两
| v******y 发帖数: 84 | 9 如果你学过 c++
java的reference其实就是 一个pointer
所以所有的Java的reference 是一个在heap 上*ptr
Java reference不是c++的reference
所以 java可以定义一个reference
Object r;//其实是c++ *r 等同于 Object *r
c++的reference就是Object &r= another,必须赋值的,不能是光的
equals(
【在 m*****r 的大作中提到】 : 写java时没有pointer了,忽然就觉得脑袋好轻松,以后一直写java就再不用为pointer头 : 痛了... : 这个return样例写得很好看,以后就这么写了. : 可是看来我只写题目还是太肤浅了,还是得去读那两本书,我再好好去想想== O.equals( : O) : 多谢大牛~~
| m*****r 发帖数: 37 | 10 恩,这下像是真明白了
所以当compiler不会自动帮我unbox而我又用了== memory address comparison就一定
会return false;但intValue()转换成primitive后==比较的就是两个int值了?
不看文档的弱弱很羞愧地飘走...
【在 z****n 的大作中提到】 : stack1.peek()==stack2.peek() : Stack里Java会把primitive 数字box成对象。虽然2个数字相同,但是他们的ref指向不 : 同的内存区域。你可以把对象转回primitive,然后比较。Integer.intValue()
| | | c***n 发帖数: 809 | 11 无脑用equal, 有container 是避免object specific methods.
【在 z****n 的大作中提到】 : stack1.peek()==stack2.peek() : Stack里Java会把primitive 数字box成对象。虽然2个数字相同,但是他们的ref指向不 : 同的内存区域。你可以把对象转回primitive,然后比较。Integer.intValue()
| m*****r 发帖数: 37 | 12 如果c++先定义一个ptr; Obj *ptr;
就相当于java定义的ref,假如两个能共享的话: Obj ref = *ptr; (觉得想明白了,这里
还是感觉很怪啊)
或者java定义了ref, Obj ref = new Obj();
那c++的ptr版本就该是: Obj *ptr = &ref;
多谢帮我理一遍.我应该是理解对了,可是因为没时间读文档,心里还很心虚...
【在 v******y 的大作中提到】 : 如果你学过 c++ : java的reference其实就是 一个pointer : 所以所有的Java的reference 是一个在heap 上*ptr : Java reference不是c++的reference : 所以 java可以定义一个reference : Object r;//其实是c++ *r 等同于 Object *r : c++的reference就是Object &r= another,必须赋值的,不能是光的 : : equals(
| v******y 发帖数: 84 | 13 c++二个在 指向同一内存的指针
Obj *ptr=new Obj()
Obj *another
another = ptr;
等于java
Obj ptr=new Obj();
Obj another;
another=ptr;
c++ stack上的obj , java 是没有的
Obj ptr (Java heap 上obj pointer/reference) != Obj ptr (c++ stack上的obj)
所以上面说的没有啥意义
c++ pointer reference 是
Obj *ptr=new Obj();
Obj * & ref=ptr;
Obj *another=ref; | p****w 发帖数: 90 | 14 nn【在 mywater (梦)的大作中提到:】n:我是最近刚转Java的弱弱,有几个小问题,
请牛牛们轻拍。n:n:这次转java,总算像是某位说的那样,原来c++转java也就分分
钟的事儿。写得顺的时n:候,边google边写,也可以写得稀里糊涂、腾云架雾、行云
流水;可问题是bug一出现n:,立马歇菜!比如,min stack, stack1.peek()==stack2
.peek(),顶上的两个数字明明是相等的,为什么会return false呢?想去google都不知
道该搜什么。。。等把java刷一遍lc就算我可以写java了?n:n:我有个function,
public boolean dfdjdf(){return dfkld;} 为什么它一定要我在最n……nn--n[发自未
名空间Android客户端] | m*****r 发帖数: 37 | 15 前两个c++/java分开的例子比较基础,都懂了
java没有stack上的poniter; java所有的obj都在heap里面?
c++凡是指向new allocated objs的ptr基本与java等价;但是c++还有指向stack的ptr,
比如int a = 5;
int *b = &a;
这种是java里没有的,明白了,之前对c++/java stack与heap的区别没什么意识
可是最后一个例子还是把人搅得七昏八素的...
Obj *ptr=new Obj(); // c++指向分配到heap上obj的ptr
Obj * & ref=ptr; // 看成 Obj *(&ref) = prt; ref和ptr都是指向heap Obj的?
// 可这与下面这句是矛盾的,所以我一定错了...求讲解
// 还是stack里的变量ref存了ptr变量的内存地址? 这个不矛盾
有点儿像...
Obj *another=ref;
【在 v******y 的大作中提到】 : c++二个在 指向同一内存的指针 : Obj *ptr=new Obj() : Obj *another : another = ptr; : 等于java : Obj ptr=new Obj(); : Obj another; : another=ptr; : c++ stack上的obj , java 是没有的 : Obj ptr (Java heap 上obj pointer/reference) != Obj ptr (c++ stack上的obj)
| v******y 发帖数: 84 | 16 这个c++ ref是ptr的别名,ref本身不是一个单独的obj,没有自己的地址,只用来调用
new obj
Because references are not objects, they don’t have
addresses. Hence, we may not define a pointer to a reference.
你的那个Obj *ptr=&ref是有问题的
【在 m*****r 的大作中提到】 : 前两个c++/java分开的例子比较基础,都懂了 : java没有stack上的poniter; java所有的obj都在heap里面? : c++凡是指向new allocated objs的ptr基本与java等价;但是c++还有指向stack的ptr, : 比如int a = 5; : int *b = &a; : 这种是java里没有的,明白了,之前对c++/java stack与heap的区别没什么意识 : 可是最后一个例子还是把人搅得七昏八素的... : Obj *ptr=new Obj(); // c++指向分配到heap上obj的ptr : Obj * & ref=ptr; // 看成 Obj *(&ref) = prt; ref和ptr都是指向heap Obj的? : // 可这与下面这句是矛盾的,所以我一定错了...求讲解
| L*1 发帖数: 11537 | 17 楼主最大的问题是缺乏object-oriented的概念。比如 getIntersectionNode 这个名字
,应该是一个method/function,不应该是class name。相应的,IntersectionNode 是
class name。另外class name第一个字母应该大写。
我也是从C/C++到java的。确实相对容易。但前提是要有object-oriented的概念。建议
把java教程的前两章节再温习一下,好好follow一下example,先建立OO概念。 | ET 发帖数: 10701 | 18 lc - leetcode ? leetcode 的核心是算法和数据结构
如果一定要有java实现这些算法,和会java还是完全不同的概念。
如果你打算依靠java找工作,刷leetcode可能只会进这些大公司有用。
【在 m*****r 的大作中提到】 : 我是最近刚转Java的弱弱,有几个小问题,请牛牛们轻拍。 : 这次转java,总算像是某位说的那样,原来c++转java也就分分钟的事儿。写得顺的时 : 候,边google边写,也可以写得稀里糊涂、腾云架雾、行云流水;可问题是bug一出现 : ,立马歇菜!比如,min stack, stack1.peek()==stack2.peek(),顶上的两个数字明明 : 是相等的,为什么会return false呢?想去google都不知道该搜什么。。。等把java刷 : 一遍lc就算我可以写java了? : 我有个function, public boolean dfdjdf(){return dfkld;} 为什么它一定要我在最 : 后一句话加个return啊,方法里的逻辑到那一步早就应该已经return了啊? : 还有就是,刷lc搭了个local的架,本来没什么心理障碍,可是每遇到有Node, : ListNode, TreeNode的题就一股无名火,我不知道该把这些定义的类塞到哪里?试过两
| f******o 发帖数: 102 | 19 这就是你的水平? netflix都是招的些什么垃圾?
【在 g*****g 的大作中提到】 : Try below, You can also move your TreeNode to a public class and you don't : need to define it everywhere. If your function returns a value, every : possible branch needs to have a return or throw exception clause. : public class Solution { : class TreeNode { : } : TreeNode a, b; : public Solution() { : //init your tree node : }
| g*****g 发帖数: 34805 | 20 你这傻逼也配跟我叫板,我说的有错你大可以指出来,指不出来就做太监吧。
【在 f******o 的大作中提到】 : 这就是你的水平? netflix都是招的些什么垃圾?
| | | T*******e 发帖数: 4928 | 21 你也真是的,你不帮楼主,还不许别人帮。如果你觉得有错,讨论就是了。别搞得上
来就骂人。
goodbug和另外一个讨论买票的帖子还是很好的。看看前人们的大白话的技术讨论(
哪怕是争论)对于我们这些菜鸟来说是很有益的。
【在 f******o 的大作中提到】 : 这就是你的水平? netflix都是招的些什么垃圾?
| c*********e 发帖数: 16335 | 22 还是用j2ee做几个网站吧。现在jsp网页前端,大家用什么做gridview? angularjs? 还
是其它framework?
【在 m*****r 的大作中提到】 : 我是最近刚转Java的弱弱,有几个小问题,请牛牛们轻拍。 : 这次转java,总算像是某位说的那样,原来c++转java也就分分钟的事儿。写得顺的时 : 候,边google边写,也可以写得稀里糊涂、腾云架雾、行云流水;可问题是bug一出现 : ,立马歇菜!比如,min stack, stack1.peek()==stack2.peek(),顶上的两个数字明明 : 是相等的,为什么会return false呢?想去google都不知道该搜什么。。。等把java刷 : 一遍lc就算我可以写java了? : 我有个function, public boolean dfdjdf(){return dfkld;} 为什么它一定要我在最 : 后一句话加个return啊,方法里的逻辑到那一步早就应该已经return了啊? : 还有就是,刷lc搭了个local的架,本来没什么心理障碍,可是每遇到有Node, : ListNode, TreeNode的题就一股无名火,我不知道该把这些定义的类塞到哪里?试过两
| m*****r 发帖数: 37 | 23 呵呵,你是说
int a = 5;
int *b = &a这个?
昨天脑袋不清醒,今天一看就是笔误,
int a = 5;
int *b;
b = &a;
不过笔误也是说知识没掌握消化牢固啊,听谁说的,面试的时候谁能保证那天脑子清醒,
所以必须做到脑子不清醒的时修按套路也会写才行,前途漫漫... | m*****r 发帖数: 37 | 24 这个,解释一下 lc一遍下来170~180题全放在一个文件里不好compile, execute,分开用
个Solution类吧,文件之件也要有所区别嘛,所以我一不小心,就把它们包成那样的了,有
个好处就是:每个题目只需要把方法prototype拷进这个包装就可以了,再回个第一行的
类名,就可以local定义方法写test case了,因为它们所有的都长一样,一个模子下来的,
没什么要去想的,觉得很方便.
我是忽视了类名第一个字母要大小,硬把方法名搬成类名了.我上学几门基础课老师都没
讲OO,cs121,cs210,到去年上半年学EC要用时自已随便看了看去组个体群体样本,本身消
化概念就不在行,理解不透对我来说也没什么好报怨的,java OO设计更好,概念应该也更
多,我赶快去把OO那几章快看一遍.多谢帮指出.
【在 L*1 的大作中提到】 : 楼主最大的问题是缺乏object-oriented的概念。比如 getIntersectionNode 这个名字 : ,应该是一个method/function,不应该是class name。相应的,IntersectionNode 是 : class name。另外class name第一个字母应该大写。 : 我也是从C/C++到java的。确实相对容易。但前提是要有object-oriented的概念。建议 : 把java教程的前两章节再温习一下,好好follow一下example,先建立OO概念。
| m*****r 发帖数: 37 | 25 好, 知道了
【在 ET 的大作中提到】 : lc - leetcode ? leetcode 的核心是算法和数据结构 : 如果一定要有java实现这些算法,和会java还是完全不同的概念。 : 如果你打算依靠java找工作,刷leetcode可能只会进这些大公司有用。
| g*****g 发帖数: 34805 | 26 你应该每道题一个文件,不需要main。至于测试应该放进另一个文件里,用junit之类
的框架。这样
除了类名你的可以跟leetcode的代码长得一样。
的,
【在 m*****r 的大作中提到】 : 这个,解释一下 lc一遍下来170~180题全放在一个文件里不好compile, execute,分开用 : 个Solution类吧,文件之件也要有所区别嘛,所以我一不小心,就把它们包成那样的了,有 : 个好处就是:每个题目只需要把方法prototype拷进这个包装就可以了,再回个第一行的 : 类名,就可以local定义方法写test case了,因为它们所有的都长一样,一个模子下来的, : 没什么要去想的,觉得很方便. : 我是忽视了类名第一个字母要大小,硬把方法名搬成类名了.我上学几门基础课老师都没 : 讲OO,cs121,cs210,到去年上半年学EC要用时自已随便看了看去组个体群体样本,本身消 : 化概念就不在行,理解不透对我来说也没什么好报怨的,java OO设计更好,概念应该也更 : 多,我赶快去把OO那几章快看一遍.多谢帮指出.
| m*****r 发帖数: 37 | 27 mark, 同问
【在 c*********e 的大作中提到】 : 还是用j2ee做几个网站吧。现在jsp网页前端,大家用什么做gridview? angularjs? 还 : 是其它framework?
| m*****r 发帖数: 37 | 28 google JUnit小看了一下,与之前我mentor的python automation framework似曾相识啊
我再去仔细看看文档怎么搭,不懂呆会儿再上来问
【在 g*****g 的大作中提到】 : 你应该每道题一个文件,不需要main。至于测试应该放进另一个文件里,用junit之类 : 的框架。这样 : 除了类名你的可以跟leetcode的代码长得一样。 : : 的,
| v******y 发帖数: 84 | 29 我最烦骂人,没有建设性意见的帖子,太影响心情,版主直接封人
。别搞得上
【在 T*******e 的大作中提到】 : 你也真是的,你不帮楼主,还不许别人帮。如果你觉得有错,讨论就是了。别搞得上 : 来就骂人。 : goodbug和另外一个讨论买票的帖子还是很好的。看看前人们的大白话的技术讨论( : 哪怕是争论)对于我们这些菜鸟来说是很有益的。
| v******y 发帖数: 84 | 30 我的习惯完全相反,leetcode 一个package
每道题一个文件,每个文件一个public class, public class中是他的test case(main)
这样所有的class都是分开测试的
【在 g*****g 的大作中提到】 : 你应该每道题一个文件,不需要main。至于测试应该放进另一个文件里,用junit之类 : 的框架。这样 : 除了类名你的可以跟leetcode的代码长得一样。 : : 的,
| | | v******y 发帖数: 84 | 31 我是在讨论java的reference
你说的这些是在stack上临时变量,java中没有stack上reference
就没有讨论必要
【在 m*****r 的大作中提到】 : 呵呵,你是说 : int a = 5; : int *b = &a这个? : 昨天脑袋不清醒,今天一看就是笔误, : int a = 5; : int *b; : b = &a; : 不过笔误也是说知识没掌握消化牢固啊,听谁说的,面试的时候谁能保证那天脑子清醒, : 所以必须做到脑子不清醒的时修按套路也会写才行,前途漫漫...
| g*****g 发帖数: 34805 | 32 写Leetcode这么做无所谓,实战测试和源码得分开。楼主也是想源码跟LC提交的代码尽
量接近。
main)
【在 v******y 的大作中提到】 : 我的习惯完全相反,leetcode 一个package : 每道题一个文件,每个文件一个public class, public class中是他的test case(main) : 这样所有的class都是分开测试的
| m*****r 发帖数: 37 | 33 你的public class里是不是也有方法的定义?
基实我对自已目前leetcode的这个架还挺满意的,写每个题只需要一个文件,可compile
可run,修改起来也很方便;
不过这个framework的流程概念还比较熟.如果我刷题之余能把JUnit这个架搭起来,是不
是就可以刷新local一次性代码的历史?
main)
【在 v******y 的大作中提到】 : 我的习惯完全相反,leetcode 一个package : 每道题一个文件,每个文件一个public class, public class中是他的test case(main) : 这样所有的class都是分开测试的
| m*****r 发帖数: 37 | 34 呵呵,是我脑子有问题,打回去看书了~~
【在 v******y 的大作中提到】 : 我是在讨论java的reference : 你说的这些是在stack上临时变量,java中没有stack上reference : 就没有讨论必要
| m*****r 发帖数: 37 | 35 是啊,如果我能把这个搭好(流程理念已经有了),我好歹也算有个自已的小小项目了,算
不算?
【在 g*****g 的大作中提到】 : 写Leetcode这么做无所谓,实战测试和源码得分开。楼主也是想源码跟LC提交的代码尽 : 量接近。 : : main)
| c*********e 发帖数: 16335 | 36 leetcode上的东西,和进公司要做的coding完全2码事。
【在 m*****r 的大作中提到】 : 是啊,如果我能把这个搭好(流程理念已经有了),我好歹也算有个自已的小小项目了,算 : 不算?
| m*****r 发帖数: 37 | 37 我是说把架搭好,leetcode成为一个test suite,这个架和摆脱一次性代码的历史总算一
点儿进步吧 |
|