在Java中,邏輯運(yùn)算有And、Or、Not三種,其中And、Or又分為普通邏輯運(yùn)算和短路邏輯運(yùn)算兩種。其中普通邏輯運(yùn)算And用“”表示,“|”表示或者關(guān)系。短路邏輯運(yùn)算的時候,“”表示短路與,“||”表示短路或。
成都創(chuàng)新互聯(lián)2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元興國做網(wǎng)站,已為上家服務(wù),為興國各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
1、一般邏輯運(yùn)算需要在邏輯運(yùn)算符兩側(cè)的邏輯表達(dá)式,都參與邏輯運(yùn)算,其表達(dá)式的值進(jìn)行比較,依次計(jì)算出最后的值。
2、短路邏輯運(yùn)算符需要首先計(jì)算最左邊的表達(dá)式,如果最左邊的表達(dá)式成立,則不再進(jìn)行整個表達(dá)式的判斷,直接取最左邊的表達(dá)式為整個表達(dá)式的值。
下面的例子雖然輸出的值一樣,但是運(yùn)算的方式不一樣:
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));
}
輸出結(jié)果為:
短路或“”只有在左邊的表達(dá)式值為true時,才會考慮右邊表達(dá)式的值,否則直接取左邊的值為整個表達(dá)式的值;
truefalse = false
falsefalse = false
falsetrue = false
truetrue =
true
//全部計(jì)算表達(dá)式兩面的值,然后取值運(yùn)算;
truefalse = false
falsefalse = false
falsetrue = false
truetrue =
true
短路或“||”只有在左邊的表達(dá)式值為false時,才會考慮右邊表達(dá)式的值,否則直接取左邊的值為整個表達(dá)式的值;
true||false =
true
false||false = false
false||true = true
true||true = true
普通或"|"全部計(jì)算表達(dá)式兩面的值,然后得出結(jié)果
true|false = true
false|false = false
false|true = true
true|true = true
適用短路運(yùn)算的條件
1)、表達(dá)式前后的邏輯條件有明顯的順序關(guān)聯(lián)關(guān)系,順序條件早的在表達(dá)式的左邊;
2)、邏輯運(yùn)算符比較少,不會有嵌套或者短路與非短路邏輯混合的情況;
3)、使用短路運(yùn)算,必須清楚的明白所要判斷的邏輯值的具體細(xì)節(jié);
4)、如果""和"||"混用,則不考慮使用短路運(yùn)算;
第一:因?yàn)锽類中的cDCost方法是新建的A類,而默認(rèn)的A類中的a,b是未賦值的,int默認(rèn)值為0,所以結(jié)果才會顯示為0
第二:因?yàn)锳類中的aBCost方法本身會輸出"A類中的成本=某值"
第三:B要基于你的A類,可以構(gòu)造B時,給B中的A賦值。如下:
public?class?B?{
//?其他不變,添加下面這個變量
private?A?a;
//?刪除原構(gòu)造函數(shù),添加新構(gòu)造函數(shù)
public?B(A?a)?{
this.a?=?a;
}
//?修改cDCost函數(shù)如下
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];//數(shù)組
private static int y=0,x=0;//初始化坐標(biāo)
private static int step,temp;//步長,上一個數(shù)組的值
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){//產(chǎn)生數(shù)組(起始值,步長,矩陣邊長)
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();
}
}
輸出結(jié)果:
要從一個List中取值,可以使用get()方法來獲取指定索引位置的元素。在你提供的代碼中,generatePonits()方法返回的是一個String類型的List,包含多個由隨機(jī)生成的坐標(biāo)組成的字符串。
如果你想要在另一個方法中分別提取出兩個隨機(jī)數(shù),可以先通過get()方法獲取對應(yīng)索引位置的坐標(biāo)字符串,然后再將其解析為數(shù)字。具體步驟如下:
```java
// 獲取generatePonits()方法隨機(jī)生成的第一個坐標(biāo)字符串,并將其解析為數(shù)字
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()方法隨機(jī)生成的第二個坐標(biāo)字符串,并將其解析為數(shù)字
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));
```
以上代碼假設(shè)你想要獲取generatePonits()方法隨機(jī)生成的第一個和第二個坐標(biāo),并將它們包含的x和y坐標(biāo)分別解析為整數(shù)。這里使用了String類的substring()方法來截取坐標(biāo)字符串中的x和y坐標(biāo)部分,并用Integer類的parseInt()方法將它們解析為整數(shù)。需要注意的是,由于坐標(biāo)字符串的格式是"(x,y)",因此在使用substring()方法時需要去掉開頭的"("和結(jié)尾的")"。
當(dāng)然,如果你僅僅只是想在generatePonits()方法和另一個方法之間傳遞生成的隨機(jī)數(shù),也可以考慮將它們定義為類成員變量,而不是在generatePonits()方法內(nèi)部聲明。這樣就可以在不同的方法之間共享這些隨機(jī)數(shù)了。