我正在尝试解决这个练习Two Intervals Intersection,我认为我解决了几乎所有的问题,但是当我尝试示例输入时我得到15和5,我想要订购结果,我的想法是使用arraylist作为间隔,然后删除重复,但我只是想要一个更好的方法来解决这个问题,如果我输入2 3和2 3我得到输出2 3和2 3,这就是为什么我问你一个更好的方法来解决这个练习,任何更好的想法
感谢您的帮助
到目前为止这是我的代码
import java.util.*;
public class TwoIntervalIntersection {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n1 = sc.nextInt();
int n2 = sc.nextInt();
int n3 = sc.nextInt();
int n4 = sc.nextInt();
if(n1 >= n3 && n1 <= n4){
System.out.print(n1);
System.out.print(" ");
}
if(n2 >= n3 && n2 <= n4){
System.out.print(n2);
System.out.print(" ");
}
if(n3 >= n1 && n3 <= n2){
System.out.print(n3);
System.out.print(" ");
}
if(n4 >= n1 && n4 <= n2){
System.out.print(n4);
}
}
}
答案 0 :(得分:2)
嘿,你的方法并不坏,虽然最好在最后打印之前存储这些东西,这样你就可以在控制台的最终打印之前更改/交换/检查它们的值。要修复以错误的方式发布间隔的部分,您可以执行以下操作:
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
System.out.print("Enter interval one: ");
int left1 = sc.nextInt();
int right1 = sc.nextInt();
System.out.print("Enter interval two: ");
int left2 = sc.nextInt();
int right2 = sc.nextInt();
int end1 = 0;
int end2 = 0;
if(left1 >= left2 && left1 <= right2)
end1 = left1;
if(right1 >= left2 && right1 <= right2)
end2 = right1;
if(left2 >= left1 && left2 <= right1)
end1 = left2;
if(right2 >= left1 && right2 <= right1)
end2 = right2;
if(end1 > end2){
int h= end1;
end1 = end2;
end2 = h;
}
System.out.println(end1 + " " + end2);
}
如果你想改进程序,可以为输入的用户间隔添加相同的交换机制,这样当他输入“15 1”而不是“1 15”时,程序仍能正常工作。