编写一个名为SameEnds
的类。编写SameEndsTester
来测试您的课程。 SameEnds
确定array list
在左边和结尾是否具有相同的数字序列,如果是,则确定该序列有多长。
您不会提示用户输入数据。通过SameEnds
中的SameEndsTester.
构造函数输入测试数据。您可以假设array list
中的所有元素都是整数。
For example, the array list
1 4 9 10 11 12 1 4 9
在左侧和右侧具有相同的序列1 4 9
,并且具有length 3
。因此,您的SameEndsTester
将打印出“最长的序列为1 4 9
和序列length is 3
”。
If the arraylist doesn't have a common sequence at the left and the right, such as
1 4 9 16 25
SameEndsTester
应该打印出“There are no common sequences”
。
这两个序列不能重叠。
For example, in the array
1 1 1 1
序列1 1
出现在左右,您的方法应返回“The longest sequence is 1 1
,序列length is 2”
public class SameEnds {
// variables for each single different numbers to create
private int first;
private int second;
private int third;
private int fourth;
private int fifth;
private int sixth;
private int seventh;
public SameEnds(int first, int second, int third, int fourth, int fifth, int sixth, int seventh) {
super();
this.first = first;
this.second = second;
this.third = third;
this.fourth = fourth;
this.fifth = fifth;
this.sixth = sixth;
this.seventh = seventh;
}
public int getFirst() {
return first;
}
public void setFirst(int first) {
this.first = first;
}
public int getSecond() {
return second;
}
public void setSecond(int second) {
this.second = second;
}
public int getThird() {
return third;
}
public void setThird(int third) {
this.third = third;
}
public int getFourth() {
return fourth;
}
public void setFourth(int fourth) {
this.fourth = fourth;
}
public int getFifth() {
return fifth;
}
public void setFifth(int fifth) {
this.fifth = fifth;
}
public int getSixth() {
return sixth;
}
public void setSixth(int sixth) {
this.sixth = sixth;
}
public int getSeventh() {
return seventh;
}
public void setSeventh(int seventh) {
this.seventh = seventh;
}
@Override
public String toString() {
return "SameEnds [first=" + first + ", second=" + second + ", third=" + third + ", fourth=" + fourth
+ ", fifth=" + fifth + ", sixth=" + sixth + ", seventh=" + seventh + "]";
}
}
import java.util.ArrayList;
public class SameEndsTester {
public static void main(String[] args) {
SameEnds same = new SameEnds(1, 2, 3, 4, 1, 2, 3);
SameEnds same2 = new SameEnds(2, 2, 3, 5, 2, 2, 3);
SameEnds same3 = new SameEnds(3, 4, 1, 5, 3, 4, 1);
ArrayList<SameEnds> getArray = new ArrayList<SameEnds>();
getArray.add(0, same);
getArray.add(1, same);
getArray.add(2, same);
getArray.add(4, same);
getArray.add(5, same);
getArray.add(6, same);
ArrayList<SameEnds> getArray2 = new ArrayList<SameEnds>();
getArray2.add(0, same2);
getArray2.add(1, same2);
getArray2.add(2, same2);
getArray2.add(4, same2);
getArray2.add(5, same2);
getArray2.add(6, same2);
ArrayList<SameEnds> getArray3 = new ArrayList<SameEnds>();
getArray3.add(0, same3);
getArray3.add(1, same3);
getArray3.add(2, same3);
getArray3.add(4, same3);
getArray3.add(5, same3);
getArray3.add(6, same3);
if (same.getFirst() == same.getFifth() && same.getSecond() == same.getSixth()
&& same.getThird() == same.getSeventh()) {
System.out.print("The longest sequence is " + getArray.get(0) + getArray.get(1) + getArray.get(2));
}
}
}
我尝试过。我认为我是“硬编码”的。
答案 0 :(得分:0)
我认为您对此有些想法。首先,不要对不同的数字进行硬编码。如果大小大于七个变量,这将导致问题。相反,只有两个List<Integer>
。一个保存输入的数字,另一个保存结果列表:
List<Integer> list = ... //Inputted numbers
List<Integer> result = new ArrayList<>(); //Empty, will add common elements later
如果从逻辑上考虑这个问题,最大的序列只能是数字大小的一半。因此,我们要做的就是将数字一分为二。因此,假设示例的大小为9
,我们将从4th
元素开始,第一个元素为
1 4 9 10 11 12 1 4 9
^ ^--Start here
\--- And here
看两个要素。如果它们相等,则在结果List
中加一个。如果不是,请将计数器移到下半部分。在此示例中,它们不是,所以我们将拥有:
//Result list: []
1 4 9 10 11 12 1 4 9
^ ^
再次1
和12
不相等,因此我们将第二部分向上移动。
//Result list: []
1 4 9 10 11 12 1 4 9
^ ^
现在它们相等了,因此我们将元素添加到列表中,并将两个计数器都向上移动:
//Result list: [1]
1 4 9 10 11 12 1 4 9
^ ^
同样,它们都是相等的,因此我们将两者相加并递增:
//Result list: [1, 4]
1 4 9 10 11 12 1 4 9
^ ^
我们添加最后一个元素,然后我们到达List
的末尾,因此我们停止了迭代。我们只剩下List
:
[1, 4, 9]
现在,我们只需要检查List
是否为空,如果是,则打印相应的消息。否则,我们只能打印列表的大小和列表本身。现在,另一种情况是是否存在匹配的元素,但是还没有结束。一个例子是:
1, 4, 9, 11, 12, 1, 4, 9, 1
您必须确保两个元素不匹配,以清除List
。
我会让你自己编写代码,但这是算法解决它的一个想法。