• 八皇后代码之JAVA修改版

    原代码忘了是在哪里找到的,我只是稍微修改了一点点东西,感觉写的非常不错,里面的注释也不少这里就不说废话了。

    public class q8 {
     private int[] arr = new int[8];//这个数组的元素的值表示皇后的纵坐标,元素的下标表示第几行
     private int x=1;//用来标识每次输出的是第几种方法

     public q8() {//构造方法
      // 从第零个皇后开始放置
      huisu(0);
     }

     private void displayArr() {//显示每一种方法中皇后的放置
      System.out.println(“<—–第”+x+”种方法开始——>”);
      for (int i = 0; i < 8; i++) {
       for (int j = 0; j < 8; j++) {
        if (arr[i] != j) {
         System.out.print(” *”);
        } else {
         System.out.print(” Q”);
        }
       }

       System.out.println();
      }
      System.out.println(“<—–第”+x+++”种方法结束——>”+”\n”);
     }

     private boolean canPutQ(int n) {//该方法判断皇后是否能放置
      for (int i = 0; i < n; i++) {
       
       if ( ((n – i) == Math.abs(arr[n] – arr[i]))// 判断对角线的斜率为1或-1
         || (arr[i] == arr[n])
        )
       {
        return false;
       }
      }

      return true;
     }

     private void huisu(int n) {//回溯
      if (n == 8) {
       displayArr(); // 放置皇后
       return;
      } else {
       for (int i = 0; i < 8; i++) {
        //
        arr[n] = i;
        if (canPutQ(n)) {
         // 放下一个皇后
         huisu(n + 1);
        }
       }
      }
     }

     public static void main(String[] args) {
      new q8();
     }
    }

    >> 什么是八皇后问题

    八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

    高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。

    以上摘自百度百科[地址:http://baike.baidu.com/view/698719.htm]

  • 精简版JAVA代码编写规范之PDF版

    昨天上JAVA课的时候老师说变量的命名全是小写,感觉不对劲啊。。。我一直记得是第一个单词的首字母小
    写,其后单词的首字母大写,后来一查确实是这样,幸亏之前自己看过,没相信他。。。

    这个PDF版本的JAVA语言编写规范只有200多KB,算是相当小的了,平时可以作为参考,下面是截图。

    javacodestyle1

     

      

    javacodestyle2

     

    下面是下载地址: Java语言编码规范

  • 实用JAVA编程经验分享

    Q:如何从键盘输入字符串,再赋给字符串对象
    A: public String getstring() throws IOException{ InputStreamReader isr =new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); return br.readLine(); }

     

    Q:如何获得某一个目录下的文件列表
    A: File MyDir = new File(“C:/Windows/.”); String[] FileNames = MyDir.list();

     

    Q:如何实现一个打开文件或者是存储文件对话框
    A: AWT: FileDialog类 + FilenameFilter类 Swing: JFileChooser类 + FileFilter类其中,基于Swing的解决方案功能更加强大,界面也更加美观。

     

    Q:利用FileReader/FileOutputStream拷贝中文文件出错?
    A: 利用如下代码片断拷贝中文文件不会出错: int c; while ((c = MyFileReader.read()) != -1) MyFileWriter.write(c); 利用如下代码片断拷贝中文文件会导致文件内容错误: int c; while ((c = MyFileReader.read()) != -1) MyFileOutputStream.write(c); 造成这个问题的原因是:FileReader.read()返回一个int,其取值范围是 0 到65535,通常来说是两个字节的;FileWriter.write(int c)向文件写 入一个int,通常来说也是两个字节的,如果某个字符的高位字节为空,那么其高位字节将被舍弃;FileOutputStream.write(int b)虽然接受一个 int作为参数,实际上只向文件写入一个字节,如果传递过来的参数是一个双字节的汉字,其高位字节将被舍弃,造成文件内容错误。建议:永远只使用InputStream/OutputStream进行IO操作。利用如下代码片断拷贝中文文件不会出错: int c; while ((c = MyFileInputStream.read()) != -1) MyFileOutputStream.write(c);

     

    Q:如何显示和存储拉丁语言中的特殊字符
    A: 使用统一码Unicode可以显示和存储拉丁语言中的特殊字符。具体应用范例如下: MyJTextArea.append(“\u00E1”); MyJTextArea.append(“\u00E2”); MyJTextArea.append(“\u00E3”); MyJTextArea.append(“\u00E4”); MyJTextArea.append(“\u00E5”); MyFileOutputStream.write(MyJTextArea.getText().getBytes(“UTF-8”)); MyFileOutputStream.close(); 同样,在读取文件的时候也需要将读到的内容转换成统一码。 byte[] b = new byte[MyFile.length()]; FileInputStream in = new FileInputStream(MyFile); in.read(b); MyJTextArea.append(new String(b, “UTF-8”));

     

    Q:如何利用文件进行数据存取
    A: 对于一般的科学计算应用程序,DataInputStream和DataOutputStream类通常是最好的选择。这两个类提供了存取各种数据的方法。下面的范例演示了构造DataInputStream和DataOutputStream的方法: MyDataInputStream = new DataInputStream( new FileInputStream(MyInputFile)); MyDataOutputStream = new DataOutputStream( new FileOutputStream(MyOutputFile)); 利用ObjectInputStream和ObjectOutputStream同样可以进行数据存取,需要注意的是这样做增加了硬盘的开销,因为进行对象序列化过程添加了一些额外的信息。在利用ObjectInputStream和ObjectOutputStream进行通讯的时候,虽然数据发收过程得到了大大简化,但是对带宽的要求也大大的提高了。

  • Java代码之全角半角转换

    实现代码如下:

    public class change {

    public static void main(String[] args) {

    String QJstr=”全角转半角DAO”;

    String result=SBCchange(QJstr);

    System.out.println(QJstr+”\n”+result);

    }

    public static final String SBCchange(String QJstr)
    {
    String outStr=””;
    String Tstr=””;
    byte[] b=null;

    for(int i=0;i<QJstr.length();i++)
    {
    try
    {
    Tstr=QJstr.substring(i,i+1);
    b=Tstr.getBytes(“unicode”);
    }
    catch(java.io.UnsupportedEncodingException e)
    {
    e.printStackTrace();
    }

    if (b[3]==-1)
    {
    b[2]=(byte)(b[2]+32);
    b[3]=0;

    try
    {
    outStr=outStr+new String(b,”unicode”);
    }
    catch(java.io.UnsupportedEncodingException e)
    {
    e.printStackTrace();
    }
    }else outStr=outStr+Tstr;
    }

    return outStr;
    }

    }

    public class Test {
    public static void main(String[] args) {
    String QJstr = “hello”;
    String QJstr1 = “hehe”;

    String result = BQchange(QJstr);
    String result1 = QBchange(QJstr1);

    System.out.println(QJstr + “\n” + result);
    System.out.println(QJstr1 + “\n” + result1);
    }

    // 半角转全角
    public static final String BQchange(String QJstr) {
    String outStr = “”;
    String Tstr = “”;
    byte[] b = null;

    for (int i = 0; i< QJstr.length(); i++) {
    try {
    Tstr = QJstr.substring(i, i + 1);
    b = Tstr.getBytes(“unicode”);
    } catch (java.io.UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    if (b[3] != -1) {
    b[2] = (byte) (b[2] – 32);
    b[3] = -1;
    try {
    outStr = outStr + new String(b, “unicode”);
    } catch (java.io.UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    } else
    outStr = outStr + Tstr;
    }
    return outStr;
    }

    // 全角转半角
    public static final String QBchange(String QJstr) {
    String outStr = “”;
    String Tstr = “”;
    byte[] b = null;

    for (int i = 0; i< QJstr.length(); i++) {
    try {
    Tstr = QJstr.substring(i, i + 1);
    b = Tstr.getBytes(“unicode”);
    } catch (java.io.UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    if (b[3] == -1) {
    b[2] = (byte) (b[2] + 32);
    b[3] = 0;
    try {
    outStr = outStr + new String(b, “unicode”);
    } catch (java.io.UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    } else
    outStr = outStr + Tstr;
    }
    return outStr;
    }
    }

    /**/// /
    // / 转全角的函数(SBC case)
    // /
    // /任意字符串
    // /全角字符串
    // /
    // /全角空格为12288,半角空格为32
    // /其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
    // /
    public static String ToSBC(String input) {
    // 半角转全角:
    char[] c = input.toCharArray();
    for (int i = 0; i< c.length; i++) {
    if (c[i] == 32) {
    c[i] = (char) 12288;
    continue;
    }
    if (c[i]< 127)
    c[i] = (char) (c[i] + 65248);
    }
    return new String(c);
    }

    /**/// /
    // / 转半角的函数(DBC case)
    // /
    // /任意字符串
    // /半角字符串
    // /
    // /全角空格为12288,半角空格为32
    // /其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
    // /
    public static String ToDBC(String input) {
    char[] c = input.toCharArray();
    for (int i = 0; i< c.length; i++) {
    if (c[i] == 12288) {
    c[i] = (char) 32;
    continue;
    }
    if (c[i]> 65280&& c[i]< 65375)
    c[i] = (char) (c[i] – 65248);
    }
    return new String(c);
    }