『壹』 農夫過河問題(java)
這個是偶寫的 你可以參考下 寫的有點多 你自己優化下吧 之前還不知道農夫過河是啥意思 不過後來知道了 如果有問題的話可以馬上說的 你的50分偶要定咯!!(可以直接運行)
import java.util.Iterator;
import java.util.LinkedList;
public class AcrossTheRiver {
// 定義三個String對象
public static final String rabbitName = "Rabbit";
public static final String wolfName = "Wolf";
public static final String cabbageName = "Cabbage";
// 判斷兩個貨物之間關系是否友好 寫的麻煩了一點= =..
public static boolean isFriendly(Goods goods1, Goods goods2) {
if (goods1 != null) {
if (goods1.getGoodsName().trim().equals(rabbitName)) {
if (goods2 == null) {
return true;
} else {
return false;
}
} else if (goods1.getGoodsName().trim().equals(wolfName)) {
if (goods2 == null || goods2.getGoodsName().trim().equals(cabbageName)) {
return true;
} else {
return false;
}
} else if (goods1.getGoodsName().trim().equals(cabbageName)) {
if (goods2 == null || goods2.getGoodsName().trim().equals(wolfName)) {
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return true;
}
}
// 我就直接寫在主方法里了
public static void main(String[] args) {
boolean isSuccess = false;
LinkedList<Goods> beforeCrossing = new LinkedList<Goods>();
LinkedList<Goods> afterCrossing = new LinkedList<Goods>();
beforeCrossing.add(new Goods(rabbitName));
beforeCrossing.add(new Goods(cabbageName));
beforeCrossing.add(new Goods(wolfName));
while (!isSuccess) {
Goods goods1 = beforeCrossing.getFirst();
System.out.println(goods1.getGoodsName() + " 被取走了");
beforeCrossing.removeFirst();
if (beforeCrossing.isEmpty()) {
afterCrossing.addLast(goods1);
isSuccess = true;
System.out.println("全部移動完畢!");
} else {
Iterator<Goods> it = beforeCrossing.iterator();
Goods[] beforeCro = new Goods[2];
for (int i = 0; it.hasNext(); i++) {
beforeCro[i] = it.next();
System.out.println(beforeCro[i].getGoodsName() + " 留了下來");
}
if (isFriendly(beforeCro[0], beforeCro[1])) {
if (afterCrossing.isEmpty()) {
afterCrossing.addLast(goods1);
System.out.println(goods1.getGoodsName() + " 被成功的放到了對岸");
} else {
Goods goods2 = afterCrossing.getFirst();
if (isFriendly(goods1, goods2)) {
afterCrossing.addLast(goods1);
System.out.println(goods1.getGoodsName() + " 被成功的放到了對岸");
} else {
beforeCrossing.addLast(goods2);
afterCrossing.removeFirst();
System.out.println(goods1.getGoodsName() + " 與 "
+ goods2.getGoodsName() + "並不和睦 於是把 " + goods2.getGoodsName()
+ "帶了回來 並將 " + goods1.getGoodsName() + " 留了下來");
}
}
} else {
beforeCrossing.addLast(goods1);
System.out.println("很可惜 留下來的兩個東西並不和睦 於是 " + goods1.getGoodsName()
+ " 又被放了回去");
}
}
}
}
}
// 貨物類
class Goods {
// 貨物名稱
private String goodsName;
// 默認構造方法
public Goods(String goodsName) {
this.goodsName = goodsName;
}
// 獲得貨物名稱
public String getGoodsName() {
return goodsName;
}
}
『貳』 為什麼Java中的BitSet使用long數組做內部存儲,而不使用int數組...
1、int是「整型」long是「長整形」
2、long int佔4個位元組,int佔2個位元組
3、int存儲的整數的值域小long。(前三條沒多大影響只是區別,主要在於下面兩條)
4、BitSet提供and和or這種操作
5、使用long能夠使得循環的次數降到最低,所以Java選擇使用long數組作為BitSet的內部存儲結構,來提高性能。
『叄』 JAVA 假如String"01010" 我要怎樣把它轉成bitset
publicBitSettoBitSet(Strings){
intlen=s.length();
BitSetbs=newBitSet(len);
for(inti=0;i<len;i++){
if(s.charAt(i)=='1')
bs.set(i);
}
returnbs;
}
publicStringtoString(BitSetbs){
intlen=bs.length();
StringBufferbuf=newStringBuffer(len);
for(inti=0;i<len;i++)
buf.append(bs.get(i)?'1':'0');
returnbuf.toString();
}
『肆』 在java中能直接把BitSet的對象直接輸入到二進制文件中嗎,用哪個流啊
package com.tuz;
import java.io.*;
public class MyTest {
public static void main(String[] args) {
String s = "010101";
int i = Integer.parseInt(s, 2);//按照2進制提取為十進制
try {
DataOutputStream out=
new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("Data")));//Data是文件的名字
out.writeByte(i);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}