在Java中,逻辑运算有And、Or、Not三种,其中And、Or又分为普通逻辑运算和短路逻辑运算两种。其中普通逻辑运算And用“”表示,“|”表示或者关系。短路逻辑运算的时候,“”表示短路与,“||”表示短路或。
成都创新互联2013年至今,是专业互联网技术服务公司,拥有项目成都做网站、网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元兴国做网站,已为上家服务,为兴国各地企业和个人服务,联系电话:028-86922220
1、一般逻辑运算需要在逻辑运算符两侧的逻辑表达式,都参与逻辑运算,其表达式的值进行比较,依次计算出最后的值。
2、短路逻辑运算符需要首先计算最左边的表达式,如果最左边的表达式成立,则不再进行整个表达式的判断,直接取最左边的表达式为整个表达式的值。
下面的例子虽然输出的值一样,但是运算的方式不一样:
private void testAnd(boolean on ,boolean
tw){
System.out.println("truefalse = "+
(truefalse));
System.out.println("falsefalse = "+
(falsefalse));
System.out.println("falsetrue = "+
(falsetrue));
System.out.println("truetrue = "+
(truetrue));
System.out.println(" ");
System.out.println("truefalse = "+ (truefalse));
System.out.println("falsefalse = "+
(falsefalse));
System.out.println("falsetrue = "+ (falsetrue));
System.out.println("truetrue = "+ (truetrue));
System.out.println(" ");
System.out.println("true||false = "+ (true||false));
System.out.println("false||false = "+
(false||false));
System.out.println("false||true = "+ (false||true));
System.out.println("true||true = "+
(true||true));
System.out.println(" ");
System.out.println("true|false = "+ (true|false));
System.out.println("false|false = "+
(false|false));
System.out.println("false|true = "+ (false|true));
System.out.println("true|true = "+
(true|true));
}
输出结果为:
短路或“”只有在左边的表达式值为true时,才会考虑右边表达式的值,否则直接取左边的值为整个表达式的值;
truefalse = false
falsefalse = false
falsetrue = false
truetrue =
true
//全部计算表达式两面的值,然后取值运算;
truefalse = false
falsefalse = false
falsetrue = false
truetrue =
true
短路或“||”只有在左边的表达式值为false时,才会考虑右边表达式的值,否则直接取左边的值为整个表达式的值;
true||false =
true
false||false = false
false||true = true
true||true = true
普通或"|"全部计算表达式两面的值,然后得出结果
true|false = true
false|false = false
false|true = true
true|true = true
适用短路运算的条件
1)、表达式前后的逻辑条件有明显的顺序关联关系,顺序条件早的在表达式的左边;
2)、逻辑运算符比较少,不会有嵌套或者短路与非短路逻辑混合的情况;
3)、使用短路运算,必须清楚的明白所要判断的逻辑值的具体细节;
4)、如果""和"||"混用,则不考虑使用短路运算;
第一:因为B类中的cDCost方法是新建的A类,而默认的A类中的a,b是未赋值的,int默认值为0,所以结果才会显示为0
第二:因为A类中的aBCost方法本身会输出"A类中的成本=某值"
第三:B要基于你的A类,可以构造B时,给B中的A赋值。如下:
public class B {
// 其他不变,添加下面这个变量
private A a;
// 删除原构造函数,添加新构造函数
public B(A a) {
this.a = a;
}
// 修改cDCost函数如下
public int cDCost() {
int cCost = c*10;
int dCost = a.aBCost();
// 下同
}
}
代码:
package com.ufotable.test;
public class Test30 {
private static int l,r,u,d;//定义上下左右边界
private static int[][] a=new int[0][0];//数组
private static int y=0,x=0;//初始化坐标
private static int step,temp;//步长,上一个数组的值
private static void add(int y,int x){
temp+=step;a[y][x]=temp;
}
private static void left(){
while(xl)add(y, --x);//未遇到左边界
if(yu){//遇到左边界且未遇到上边界
l++;up();
}
}
private static void right(){
while(xr)add(y, ++x);//未遇到右边界
if(yd){//遇到右边界且未遇到下边界
r--;
down();
}
}
private static void up(){
while(yu)add(--y, x);//未遇到上边界
if(xr){//遇到上边界且未遇到右边界
u++;
right();
}
}
private static void down(){
while(yd)add(++y, x);//未遇到下边界
if(xl){//遇到下边界且未遇到左边界
d--;
left();
}
}
private static void fun(int start,int step,int length){//产生数组(起始值,步长,矩阵边长)
Test30.step=step;
l=u=0;r=d=length-1;
a=new int[length][length];
a[0][0]=temp=start;
up();
}
public static void print(){//输出矩阵
for(int i=0;ia.length;i++){
for(int j=0;ja.length;j++){
System.out.print(a[i][j]+"\t");
}System.out.println();}
}
public static void main(String[] args) {
fun(0,1,10);//测试
print();
}
}
输出结果:
要从一个List中取值,可以使用get()方法来获取指定索引位置的元素。在你提供的代码中,generatePonits()方法返回的是一个String类型的List,包含多个由随机生成的坐标组成的字符串。
如果你想要在另一个方法中分别提取出两个随机数,可以先通过get()方法获取对应索引位置的坐标字符串,然后再将其解析为数字。具体步骤如下:
```java
// 获取generatePonits()方法随机生成的第一个坐标字符串,并将其解析为数字
String point1Str = generatePonits().get(0);
int x1 = Integer.parseInt(point1Str.substring(1, point1Str.indexOf(",")));
int y1 = Integer.parseInt(point1Str.substring(point1Str.indexOf(",") + 1, point1Str.length() - 1));
// 获取generatePonits()方法随机生成的第二个坐标字符串,并将其解析为数字
String point2Str = generatePonits().get(1);
int x2 = Integer.parseInt(point2Str.substring(1, point2Str.indexOf(",")));
int y2 = Integer.parseInt(point2Str.substring(point2Str.indexOf(",") + 1, point2Str.length() - 1));
```
以上代码假设你想要获取generatePonits()方法随机生成的第一个和第二个坐标,并将它们包含的x和y坐标分别解析为整数。这里使用了String类的substring()方法来截取坐标字符串中的x和y坐标部分,并用Integer类的parseInt()方法将它们解析为整数。需要注意的是,由于坐标字符串的格式是"(x,y)",因此在使用substring()方法时需要去掉开头的"("和结尾的")"。
当然,如果你仅仅只是想在generatePonits()方法和另一个方法之间传递生成的随机数,也可以考虑将它们定义为类成员变量,而不是在generatePonits()方法内部声明。这样就可以在不同的方法之间共享这些随机数了。