对于Java中特定上下文中的每个块

对于Java中特定上下文中的每个块,java,Java,我是一名八年级学生,我的任务是用Java创建一个应用程序,根据两条直线的斜率和y轴截距,找到两条虚拟直线相交的点。现在,我有两个数组(都有长值),它们存储给定x值(x=0、1、2等)的y值。现在我需要弄清楚如何为每个块(你知道,其中有冒号的块)创建一个数组,以检查第一个数组中的y值是否等于另一个数组中的对应值。如何执行此操作?由于您有两个数组,您可能应该使用普通循环,而不是每个循环使用一个。比如: // assuming both arrays are of the same size for

我是一名八年级学生,我的任务是用Java创建一个应用程序,根据两条直线的斜率和y轴截距,找到两条虚拟直线相交的点。现在,我有两个数组(都有长值),它们存储给定x值(x=0、1、2等)的y值。现在我需要弄清楚如何为每个块(你知道,其中有冒号的块)创建一个数组,以检查第一个数组中的y值是否等于另一个数组中的对应值。如何执行此操作?

由于您有两个数组,您可能应该使用普通循环,而不是每个循环使用一个。比如:

// assuming both arrays are of the same size
for (int i = 0; i < firstArr.length; ++i) {
    if (firstArr[i] == secondArr[i]) {
        // match found
    }
}
//假设两个数组的大小相同
对于(int i=0;i
我不打算对算法进行评论,但对于您的用例来说,每个块的对应性似乎不太合适。除了每个块不适合多个集合之外,还可能存在数组大小不同的问题

最好使用如下循环

for(int i = 0;i < firstArr.length && i < secondArr.length;i++) {
  //Your comparison logic here
}
for(int i=0;i
这个循环的作用是,它只运行到两个数组中较小数组的末尾。

Edit

List<Long> xList; //Assuming it has 0, 1, 2, 3, 4, 5

for(Long x : xList){
  Long y1 = giveMePointYBasedOnSlope1(x);
  Long y2 = giveMePointYBasedOnSlope2(x);

  if(y1 == y2){
    System.out.println("They do intersect");
    break; //leave loop
  }
}

//Example slope1 :  y = (x * 2) + 3
public Long giveMePointYBasedOnSlope1(Long x){
  return (x*2) + 3;
}

//Example slope2 :  y = (x * -.5) + 7    
public Long giveMePointYBasedOnSlope2(Long x){
  return (x * -0.5) + 7;
}
如果在数组中同时有x和y类型Long,只需执行以下操作

findIntersect:
  for(Long x : xArray){
    for(Long y : yArray){
      if(x==y){
        System.out.println("They do intersect");
        break findIntersect; //leave loop
      }
    }
  }
很抱歉错过了那个部分

结束编辑

List<Long> xList; //Assuming it has 0, 1, 2, 3, 4, 5

for(Long x : xList){
  Long y1 = giveMePointYBasedOnSlope1(x);
  Long y2 = giveMePointYBasedOnSlope2(x);

  if(y1 == y2){
    System.out.println("They do intersect");
    break; //leave loop
  }
}

//Example slope1 :  y = (x * 2) + 3
public Long giveMePointYBasedOnSlope1(Long x){
  return (x*2) + 3;
}

//Example slope2 :  y = (x * -.5) + 7    
public Long giveMePointYBasedOnSlope2(Long x){
  return (x * -0.5) + 7;
}
列表xList//假设它有0,1,2,3,4,5
用于(长x:xList){
长y1=给定的基点基线斜率1(x);
长y2=给定的基准点斜率2(x);
如果(y1==y2){
System.out.println(“它们确实相交”);
break;//离开循环
}
}
//示例1:y=(x*2)+3
公共长指定点BASEDONSLOPE1(长x){
返回(x*2)+3;
}
//示例2:y=(x*-.5)+7
公共长指定点BasedOnSlope2(长x){
回报率(x*-0.5)+7;
}

好的观点。。。我明白你的意思了,谢谢!如果可能的话,我会接受,除非有更好的答案+1@D3mon-1stVFW他回答了我的问题,尽管他可能给我指出了不同的方向。这其中的棘手之处在于
foreach
循环只在单个实体上迭代,而您正试图在多个实体上迭代(两个数组同时迭代)。很清楚如何使用传统的
for
循环来实现这一点,但不使用
foreach
循环。哦,就像下面的答案(使用向上投票)一样,对吗?是的,但是如果你被特别要求使用
foreach
循环,你将需要其他类型的解决方案。@CarlManaster不能说我对Java了解太多,所以我真的不在乎我用的是什么,只要代码最终能正常工作,并且易于阅读/高效。那么@Binyamin的解决方案就很好了。好的,谢谢。所以基本上和Binyamin Sharet的答案一样,对吧?令人困惑。。。但是好吧。。我想我认为这是最容易理解的,假设你有不错的数学。可以使用坡度创建y点。因为你有一组x点,那么你只需要创建y,如果y是相同的,那么它们就会相交。我理解数学部分,但花了我一段时间+1我看到了编辑,现在确实更有意义了。非常感谢。从RL示例和处理200k+行代码的项目中,我可以向您保证,函数名称所说的越多,就越容易理解它在做什么,就像读一个句子,它至少可以节省2分钟\function。你只知道它应该做什么,而不看代码。