⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 riesarray.java

📁 Pasc+Java 这是一个国外的随机自动机*(RAM)一个学习用的程序
💻 JAVA
字号:
import java.math.*;
import java.util.*;

public class RiesArray
{
		  public static String bi_to_n(String s) throws NumberFormatException
	  {
		      int x=0;
		      BigInteger k=new BigInteger("2");
		      BigInteger ergebnis=new BigInteger("0");
		      for(int i=s.length()-1;i>=0;i--)
		      {

			      char ch=s.charAt(i);
			      BigInteger a=new BigInteger(new Character(ch).toString());
			      if((a.toString().equals("0")) || (a.toString().equals("1")))
			      {
			      BigInteger big=(k.pow(x)).multiply(a);
			      ergebnis=ergebnis.add(big);

			      //System.out.println(a.toString()+" "+x+" "+" "+big+" "+ergebnis.toString());			      
			      x++;

			      }
			      else
			      {throw new NumberFormatException();}
			     
		      }
		      return ergebnis.toString();
	  }
	
	public static String n_to_k(BigInt k,String s,String alphabet)
    {
	    BigInt a=new BigInt(s);
	    String k_ergebnis="";
	    String end_ergebnis="";
	    String end_ergebnis1="";
	    while(a.ne(new BigInt("0")))
	    {
		    k_ergebnis+=(a.mod(k)).toString();
		    a=a.divide(k);
	    }
	    for(int i=k_ergebnis.length()-1;i>=0;i--)
	    {
		    end_ergebnis+=k_ergebnis.charAt(i);
	    }
	    
	    for(int i=0;i<end_ergebnis.length();i++)
	    {

		    int index=Integer.parseInt(new Character(end_ergebnis.charAt(i)).toString());

		    end_ergebnis1+=new Character(alphabet.charAt(index)).toString();
	    }
	    
	    return end_ergebnis1;
    }
    
    /*
     *Sorgt fu;&umlr die m-stellige Bina;&umlrdarstellung von n mit fu;&umlhrenden Nullen
     *@return String
     *@param String s : Eine Zahl, int m
     *
     */
    public static String shiften(String s,int m)
    {
    	String zwischenString="";
    	for (int i=0;i<m;i++)
    	{
    		zwischenString+="0";
    	}
    	String ergebnis=zwischenString+s;
    	return ergebnis;
    }
    
    /*
     *Jedes Bit einer Zahl in Bina;&umlrdarstellung wird verdoppelt
     *@param String s:Eine Zahl
     *@return String
     */
    public static String verdoppeln(String s)
    {
    	String ergebnis="";
    	for(int i=0;i<s.length();i++)
    	{
    		char c=s.charAt(i);
    		ergebnis+=String.valueOf(c)+String.valueOf(c);
    	}
    	return ergebnis;
    }
    /*
     *Array wird als eine Zahl in Bina;&umlrdarstellung kodiert.Dabei wird zwischen Werte und
     *Header unterschieden.Der Header beinhaltet die Anzahl der Elemente des Arrays und die 
     *L&auml;nge eines einzelnes Eintrags in Bits.Das niedrigwertigste Bit des Headers ist eine
     *Null um eindimensionales von einem mehrdimensionalen Array unterscheiden zu k&ouml;nnen.
     *@param String s
     */
    public void array_to_RiesArray(String s)
    {
    	ArrayList stringList=new ArrayList();//hier werden alle Arraywerte als Strings gespeichert
    	String stringErgebnis="";
    	StringTokenizer t=new StringTokenizer(s,",");
    	int max=0;//Maximale L鋘ge der Zahl im Array
    	while(t.hasMoreTokens()) //In dieser Schleife wird maximale L鋘ge der Zahl im Array
    	{
    		String str=t.nextToken();
    		String str1=n_to_k(new BigInt("2"),str,"01");
    		if(str1.length()>max)
    			max=str1.length();
    		stringList.add(str1);
    	}
    	for(int i=0;i<stringList.size();i++)//Es wird geschiftet und verdoppelt
    	{
    		String str=stringList.get(i).toString();
    		if(max>str.length())
    		{
    			str=shiften(str,max-str.length());
    			str=verdoppeln(str);
    		}
    		else{
    			str=verdoppeln(str);
    		}
    		stringList.set(i,str);
    	}
    	for(int i=(stringList.size()-1);i>=0;i--)//Ergebnisstring wird gebildet
    	{
    		stringErgebnis+= stringList.get(i).toString();
    	}
    	//header wird hinzugef黦t
    	//String header="01"+verdoppeln(n_to_k(new BigInt("2"),new Integer(stringList.size()).toString(),"01"))+
    				//"01"+verdoppeln(n_to_k(new BigInt("2"),new Integer(max).toString(),"01"))+"0";
    	String anzahl="01"+verdoppeln(n_to_k(new BigInt("2"),new Integer(stringList.size()).toString(),"01"));
    	String maxLaenge="01"+verdoppeln(n_to_k(new BigInt("2"),new Integer(max).toString(),"01"))+"0";
    	//String gesamtErgebnis=stringErgebnis+header;
    	setWerte(stringErgebnis);
    	setHeader(new Header(anzahl,maxLaenge));
    	//return new BigInt(gesamtErgebnis);
    }
    /*
     *Die Verdoppelung wird aufgehoben
     *@param String
     *@return String
     */
    private static String reduzieren(String s)
    {
    	String ergebnis="";
    	for(int i=0;i<s.length();i=i+2)
    	{
    		char c=s.charAt(i);
    		ergebnis+=String.valueOf(c);
    	}
    	return ergebnis;
    }    	
    /*
     *Zugriff auf eine bestimmte Position in einem Array
     *@param int - index
     *@return BigInt
     */
    public BigInt get(int pos)
    {
    	String ergebnis="";


    		Header h=getHeader();
    		String laenge=h.getMaxLaenge();
    		laenge=bi_to_n(reduzieren(laenge.substring(2,laenge.length()-1)));
    		int begin=pos*Integer.parseInt(laenge)*2;
    		int end=begin+Integer.parseInt(laenge)*2;
    		ergebnis=getWerte().substring(begin,end);
    		ergebnis=reduzieren(ergebnis);
		
    		System.out.println("Laenge: "+begin+"\t"+end);
    		return new BigInt(bi_to_n(ergebnis));

    }
    
    /*
     *Zugriff auf eine bestimmte Position in einem Array
     *@param BigInt
     *@return BigInt
     */
    
        public BigInt get(BigInt position)
    {
    	String ergebnis="";
    	String posit=position.toString();
    	int pos=Integer.parseInt(posit);


    		Header h=getHeader();
    		String laenge=h.getMaxLaenge();
    		laenge=bi_to_n(reduzieren(laenge.substring(2,laenge.length()-1)));
    		int begin=pos*Integer.parseInt(laenge)*2;
    		int end=begin+Integer.parseInt(laenge)*2;
    		ergebnis=getWerte().substring(begin,end);
    		ergebnis=reduzieren(ergebnis);
		
    		//System.out.println("Laenge: "+begin+"\t"+end);
    		return new BigInt(bi_to_n(ergebnis));

    }
    /*
     *Gibt Anzahl der Elemente in einem Array zur&uuml;ck
     *@return BigInt
     */
    public BigInt getLength()
    {
    	//String ergebnis="";
    		Header h=getHeader();
    		String anzahl=h.getAnzahl();
    		anzahl=bi_to_n(reduzieren(anzahl.substring(2,anzahl.length())));
    		return new BigInt(anzahl);    	
    }
    
    public RiesArray()
    {}
    
    public RiesArray(String werte,Header head)
    {
    	Werte=werte;
    	header=new Header(head.getAnzahl(),head.getMaxLaenge());
    }
    
    private String getWerte()
    {
    	return Werte;
    }
    private Header getHeader()
    {
    	return header;
    }
    private void setWerte(String werte)
    {
    	Werte=werte;
    }
    private void setHeader(Header head)
    {
    	header=new Header(head.getAnzahl(),head.getMaxLaenge());
    }
    public String toString()
    {
    	return Werte+header.toString();
    }
    	
    private String Werte;
    private Header header;
    public static void main (String[]args)
    {
    	int i=13;
    	String s=n_to_k(new BigInt("2"),"13","01");
    	System.out.println(s+" Anzahl der Bits= "+s.length()+" Mit Shift um 2= "+shiften(s,2));
    	System.out.println(verdoppeln(s)+" Dezimaldarstellung= "+bi_to_n(s));
    	String array="10,24,7,13,3,3,3,3,3";
    	RiesArray arr=new RiesArray();
    	//BigInt a=array_to_BigInt(array);
    	//System.out.println(array+"\t" +a+"\t"+ a.andNot(a));
    	arr.array_to_RiesArray(array);
    	//System.out.println(get(a,new BigInt("0")).toString());
    	System.out.println(arr.getWerte()+"\t"+arr.getHeader());
    	System.out.println(arr.toString());
    	System.out.println("Ergebnis:  "+arr.getLength());
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -