既然向我求助了,就幫你寫一下。。。。
package com.dsideal.test;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class JosephusPuzzle {
/**
* @param args
*/
public void puzzle(){
System.out.println("游戲開始:");
System.out.println("請輸入人數:");
int playerNum=2,m=3;
Scanner scan =new Scanner(new Scanner(System.in).nextLine());
if(scan.hasNext()){
playerNum=scan.nextInt();
}
scan.close();
System.out.println("請輸入m的值:");
scan =new Scanner(new Scanner(System.in).nextLine());
if(scan.hasNext()){
m=scan.nextInt();
}
scan.close();
System.out.println("游戲人數為:"+playerNum+" m值為:"+m);
System.out.println("初始化游戲者對象。。。");
System.out.println("隨即獲取密碼,為演示簡便密碼不大於人數。");
List<Person> pList=new ArrayList<Person>();
Person p=null;
Random random=new Random();
for(int i=0;i<playerNum;i++){
p=new Person();
p.setId(i+1);
p.setPassword(random.nextInt(playerNum-1)+1);
p.setOut(false);
pList.add(p);
System.out.println("第"+(i+1)+"個人的密碼是:"+p.getPassword());
}
List<Person> outPList=new ArrayList<Person>();
loop(m,pList,outPList);
System.out.println("出列順序為:");
for(Person person:outPList){
System.out.print(person.getId()+"\t");
}
}
public void loop(int m,List<Person> pList,List<Person> outPList){
int k=m;
for(int i=0;i<pList.size();i++){
//System.out.println(i+" "+(k-1));
if(i==(k-1)){
Person p=pList.get(i);
outPList.add(p);
pList.remove(p);
m=p.getPassword();
break;
}
if(i+1==pList.size()&&k>pList.size()){
i=-1;k=k-pList.size();
}
}
if(pList.size()>0){
loop(m,pList,outPList);
}
}
public static void main(String[] args) {
new JosephusPuzzle().puzzle();
}
class Person{
private int id;
private int password;
private boolean isOut;
public boolean isOut() {
return isOut;
}
public void setOut(boolean isOut) {
this.isOut = isOut;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getPassword() {
return password;
}
public void setPassword(int password) {
this.password = password;
}
}
}
② java spring 獲取配置文件,並放入一個list 對象中
你的思路不可實現,不過我弱弱的問一下,寫個靜態工具類解析配置文件不是什麼難事?既然要考慮變動,我說這條思路不是更好?
③ java開發中圖片文件.plist怎麼解析
DOM解析比較麻煩 因為element getChildNodes 會獲取到text對象。而這個對象可能是一個空白字元解析起來異常麻煩!
DOM 採用建立樹形結構的方式訪問 XML 文檔,而 SAX 採用的事件模型。
DOM 解析器把 XML 文檔轉化為一個包含其內容的樹,並可以對樹進行遍歷。用 DOM 解析模型的優點是編程容易,開發人員只需要調用建樹的指令,然後利用navigation APIs訪問所需的樹節點來完成任務。可以很容易的添加和修改樹中的元素。然而由於使用 DOM 解析器的時候需要處理整個 XML 文檔,所以對性能和內存的要求比較高,尤其是遇到很大的 XML 文件的時候。由於它的遍歷能力,DOM 解析器常用於 XML 文檔需要頻繁的改變的服務中。
SAX 解析器採用了基於事件的模型,它在解析 XML 文檔的時候可以觸發一系列的事件,當發現給定的tag的時候,它可以激活一個回調方法,告訴該方法制定的標簽已經找到。SAX 對內存的要求通常會比較低,因為它讓開發人員自己來決定所要處理的tag。特別是當開發人員只需要處理文檔中所包含的部分數據時,SAX 這種擴展能力得到了更好的體現。但用 SAX 解析器的時候編碼工作會比較困難,而且很難同時訪問同一個文檔中的多處不同數據。
DOM [樹型結構] SAX [事件驅動型]
於是採用SAX解析!網上有人寫過,但存在些問題,於是自己做了修改測試!放出代碼如下:
[java] view plain
package logame.core;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* .plist配置文件的解析器
*
* @author afly
*
*/
public class PlistHandler extends DefaultHandler {
private boolean isRootElement = false;
private boolean keyElementBegin = false;
private String key;
Stack<Object> stack = new Stack<Object>();
private boolean valueElementBegin = false;
private Object root;
@SuppressWarnings("unchecked")
public HashMap<String, Object> getMapResult() {
return (HashMap<String, Object>) root;
}
@SuppressWarnings("unchecked")
public List<Object> getArrayResult() {
return (List<Object>) root;
}
@Override
public void startDocument() throws SAXException {
System.out.println("開始解析");
}
@Override
public void endDocument() throws SAXException {
System.out.println("結束解析");
}
@SuppressWarnings("unchecked")
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// System.out.println(uri+"startElement:"+qName);
if ("plist".equals(qName)) {
isRootElement = true;
}
if ("dict".equals(qName)) {
if (isRootElement) {
stack.push(new HashMap<String, Object>());// 壓棧
isRootElement = !isRootElement;
} else {
Object object = stack.peek();
HashMap<String, Object> dict = new HashMap<String, Object>();
if (object instanceof ArrayList)
((ArrayList<Object>) object).add(dict);
else if (object instanceof HashMap)
((HashMap<String, Object>) object).put(key, dict);
stack.push(dict);
}
}
if ("key".equals(qName)) {
keyElementBegin = true;
}
if ("true".equals(qName)) {
HashMap<String, Object> parent = (HashMap<String, Object>) stack.peek();
parent.put(key, true);
}
if ("false".equals(qName)) {
HashMap<String, Object> parent = (HashMap<String, Object>) stack.peek();
parent.put(key, false);
}
if ("array".equals(qName)) {
if (isRootElement) {
ArrayList<Object> obj = new ArrayList<Object>();
stack.push(obj);
isRootElement = !isRootElement;
} else {
HashMap<String, Object> parent = (HashMap<String, Object>) stack.peek();
ArrayList<Object> obj = new ArrayList<Object>();
stack.push(obj);
parent.put(key, obj);
}
}
if ("string".equals(qName)) {
valueElementBegin = true;
}
}
/*
* 字元串解析(non-Javadoc)
*
* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
*/
@SuppressWarnings("unchecked")
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
System.out.println("characters:");
if (length > 0) {
if (keyElementBegin) {
key = new String(ch, start, length);
System.out.println("key:" + key);
}
if (valueElementBegin) {
if (HashMap.class.equals(stack.peek().getClass())) {
HashMap<String, Object> parent = (HashMap<String, Object>) stack.peek();
String value = new String(ch, start, length);
parent.put(key, value);
} else if (ArrayList.class.equals(stack.peek().getClass())) {
ArrayList<Object> parent = (ArrayList<Object>) stack.peek();
String value = new String(ch, start, length);
parent.add(value);
}
System.out.println("value:" + new String(ch, start, length));
}
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if ("plist".equals(qName)) {
;
}
if ("key".equals(qName)) {
keyElementBegin = false;
}
if ("string".equals(qName)) {
valueElementBegin = false;
}
if ("array".equals(qName)) {
root = stack.pop();
}
if ("dict".equals(qName)) {
root = stack.pop();
}
}
}
調用也相對比較簡單:
[java] view plain SAXParserFactory factorys = SAXParserFactory.newInstance();
SAXParser saxparser = factorys.newSAXParser();
PlistHandler plistHandler = new PlistHandler();
saxparser.parse(uri, plistHandler);
HashMap<String, Object> hash = plistHandler.getMapResult();
ArrayList<Object> array = (ArrayList<Object>)plistHandler.getArrayResult();
返回可以是一個 dict 也可以是一個array根據自己的格式獲得。
④ 怎樣安裝Java se 6 在Mac里
下載mac版專用的jdk1.7,地址如下:http://jdk7.java.net/macportpreview/,裡面有最新版的(不過還是測試版),版本更新頻率每兩周大概會release一個build,我安裝的版本是b223(更新一下,最新版本是b227了,已經不是OpenJDK了)。
下好之後,雙擊dmg打開,然後簡單的來一個拖拽(這個就不廢話了,不會拽的面壁去)。
改變jvm首選順序,在Spotlight里搜索[Java Preferences](中文版應該是JAVA首選項么?),應該能看到已經有的幾個虛擬機,把JAVA SE 7拖拽到最上面,就可以了(比如我拖拽的是64位版本的)。
確認java使用的版本:開一個終端,輸入java -version,確認jvm的版本號是jdk1.7.0。
下面的操作是如何改變eclipse默認的jre,首先打開eclipse(如果你改了jvm的順序,讓1.7在最上面,又沒在eclipse的配置里寫死jvm的啟動位置,那麼應該就已經用jdk1.7啟動了)。
打開首選項->Java->Installed JREs,看到右側的JRE列表,如果已經使用是默認的jdk1.6的話,點Add,選擇MacOS X VM,在路徑的地方指向到jdk7的安裝位置,就可以了。
話沒說完,如果你找不到這該死的jdk1.7的安裝位置在哪裡,可以考慮粘下這個地址(這個是我系統里的位置,我猜測大家的都應該差不多哈)。/Library/Java/JavaVirtualMachines/JDK 1.7.0 Developer Preview.jdk/Contents/Home
正確的話,下面會識別出一堆jar包位置,然後給這一坨jre起個帥氣的名字。
如果想啟用jdk1.7的語法,必須要eclipse版本在3.8/4.2以上(目前我寫這篇博客的時候,4.2已經達到了Milestone4),然後可以在workspace/project屬性里把編譯等級調整到1.7,就能享受jdk1.7的語言特性了(不過前提是,使用的jdk以及jre必須都是jdk1.7以上才行)。
希望這篇啰嗦的文章對大家有幫助。
更新信息
支持Java7語法的eclipse版本是從3.7開始的,具體見如下地址:http://wiki.eclipse.org/JDT/Eclipse_Java_7_Support_(BETA)
Mac下Eclipse默認還是會使用系統的jdk1.6啟動,好像強制修改eclipse.ini的vm參數是無效的,必須修改Eclipse.app/Content/Info.plist,打開看裡面有注釋寫著呢。不過我這里eclipse4.2M4修改後依然無效。
有時候會出現部分應用還使用舊的jdk1.6的情況出現,例如maven有時候就會堅持用舊版的,這時候只好找個地方導出下JAVA_HOME變數了。改到jdk1.7的Home目錄即可。
jdk1.7 macport從b11開始合並了分支代碼,開始已經直接使用安裝程序安裝了,相應安裝到的路徑也改變了,是這個:/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home 。update on 2012-2-12
jdk1.7u6 b09開始,bundle name變更,這樣就可以在安裝新版本的同時保留舊版本了。當然了,路徑也會變化,變成了這個樣子:/Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk,其中06是update版本號。簡易大家可以做一個軟連接,cd /Library/Java/JavaVirtualMachines;ln -s jdk1.7.0_06.jdk 1.7.0.jdk,這樣就不會受到版本升級的影響了(這樣eclipse里設置的JRE路徑就用軟連接里的路徑就好了)。
⑤ mac 如何打開plist文件怎麼打開
用打開文本文件的程序如TextWrangler打開就行
TextWrangler大概是許多的Mac使用者最常用的文字編輯器之一,廠商日前放出了新版本.TextWrangler是由Bare Bones Software出品的一款免費的文本編輯器。
它的前身是BBEditor Lite,TextWrangler既是一個方便的文本編輯器,也是非常輕巧的代碼開發工具,內置了包括HTML/XHTML, XML, PHP, JavaScript, Perl, Python, Ruby, Lua, Java, ANSI C, C++, Objective-C等幾十種語言的語法高亮。
⑥ plist文件怎麼打開
plist文件用記事本打開方法如下:
打開系統記事本程序:
輸入System.Diagnostics.Process.Start("notepad.exe")
用記事本程序打開一個txt文件:
例如在D盤的【abc.txt】文件,傳入文件的路徑參數即可,如下:
System.Diagnostics.Process.Start("notepad.exe", "D:\\a.txt");
⑦ java怎麼讀取plist配置文件
大概有4種方法,這里我用了一個簡單例子來說明問題。
xml文件:
Xml代碼
<?xml version="1.0" encoding="GB2312"?>
<RESULT>
<VALUE>
<NO>A1234</NO>
<ADDR>河南省鄭州市</ADDR>
</VALUE>
<VALUE>
<NO>B1234</NO>
<ADDR>河南省鄭州市二七區</ADDR>
</VALUE>
第一種 DOM 實現方法:
Java代碼
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class MyXMLReader2DOM {
public static void main(String arge[]) {
long lasting = System.currentTimeMillis();
try {
File f = new File("data_10k.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
⑧ plist文件在java中應該怎麼解析android開發中,應該怎麼去解析plist文件
還是SAX唄,有啥可說的,DOM也行啊。
⑨ 請教關於 Mac OS X 下 Java 的路徑問題
1. Mac OS自帶的JDK 6:/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java。看到有朋友說OS 10.10刪除了自帶的JDK 6,但是我升級10.10之後還是能找到該路徑,不知道是否需要重新在蘋果網站下載JDK 6呢?
2. Oracle的JDK 7/8
(1)用/usr/libexec/java_home命令得到的Java Home路徑是:/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home,這是我之前在Oracle網站下載的jdk 8 update 20。
(2)在Java控制面板顯示的路徑:/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java,版本是Java 8 update 25。