Java作業 三角形面積+螺旋方陣+八皇后(網上摘錄)

從鍵盤輸入3個浮點數作爲三角形三邊的邊長,試計算三角形的面積。

遇到問題1: while 裏面不兼容 

解決: 改成while(1<20) 設置while只是想爲了當輸入錯誤的時候重新輸入 輸入正確的時候自動跳出 (沒有將選擇是否跳出的功能編出 ) 所以括號裏面填了一個恆等式

遇到問題2:找不到類

解決方案:在文檔開頭加入包 如下import java.util.*; 

遇到問題三:無法從靜態上下文中引入非靜態的變量

解決方案:開始的時候不理解爲什麼會出現這個問題 後來發現因爲定義的時候把變量放在了主函數外面 這時候變量相當於類的成員 當然是非靜態的了 將變量放入函數裏面 問題迎刃而解 

遇到問題四:找不到類

解決方案:在文檔開頭加入包 如下import java.lang.Math; 未果 不知道爲什麼

在函數前加Math. 具體如下:area=Math.sqrt(s*(s-a)*(s-b)*(s-c)); //

程序運行如下:

源代碼

import java.io.*;

import java.lang.Math;

import java.util.*; //

/**

 * 從鍵盤輸入3個浮點數作爲三角形三邊的邊長,試計算三角形的面積。

 * @author august

 * @version 1.0

 * @since 1.0

 */

public class TriArea{

    public static void main(String args[])

    {

     double a,b,c,s,area;      //三邊邊長 s爲中間變量 area爲面積 //爲函數裏面的暫時自變量

     while(1<20){

        System.out.println("Please input the side");

        Scanner input = new Scanner(System.in);

         a = input.nextDouble();

         b = input.nextDouble();

         c = input.nextDouble();  

        

        if((a+b>c)&&(b+c>a)&&(a+c>b)){

         s=(a+b+c)/2;

         area=Math.sqrt(s*(s-a)*(s-b)*(s-c)); //

         System.out.println("The area is "+area);

         break;

         }

        else System.out.println("The input is wrong. please again");

       }

    }  

}

作業二: 編程序,顯示螺旋方陣:

 * 1   2  3  4

 * 12 13 14  5

 * 11 16 15  6

 * 10  9  8  7

源程序如下:

import java.io.*;

import java.util.*; //

public class ScrewSquare{

    public static void main(String args[])

    {

     System.out.println("Please input the side");

      Scanner input = new Scanner(System.in);

      int n = input.nextInt();

     int[] arc = new int[100];

     int c = 1;

     int v = 0;

     for(int i = n-1; i >= 0; i -= 2){

          arc[v] = c;

       for(int j = 0; j < i ; j++){

       arc[v] = c++;

       v++;

       }      

       for(int j = 0; j < i ; j++){

       arc[v] = c++;

       v += n;

       }

       for(int j = 0; j < i ; j++){

       arc[v] = c++;

       v--;

       }      

       for(int j = 0; j < i ; j++){

       arc[v] = c++;

       v -= n;

       }

       v += n+1;

       }

      for(int i = 0; i<n; i++){

       for (int j = 0; j<n;j++){

          System.out.print('/t');

          System.out.print(arc[i*n+j]);

          System.out.print('/t');

        }

        System.out.print('/n');

       }

    }  

}

作業三:

public class Queen {

 int num; // 記錄方案數

 int[] queenline = new int[8]; // 記錄8個皇后所佔用的列號

 boolean[] col = new boolean[8]; // 列安全標誌

 boolean[] diagonal = new boolean[16]; // 對角線安全標誌

 boolean[] undiagonal = new boolean[16]; // 反對角線安全標誌

 void solve(int i) {

  for (int j = 0; j < 8; j++) {

   if (col[j] && diagonal[i - j + 7] && undiagonal[i + j]) {

    // 表示第i行第j列是安全的可以放皇后

    queenline[i - 1] = j + 1;

    col[j] = false; // 修改安全標誌

    diagonal[i - j + 7] = false;

    undiagonal[i + j] = false;

    if (i < 8) // 判斷是否放完8個皇后

    {

     solve(i + 1); // 未放完8個皇后則繼續放下一個

    } else // 已經放完8個皇后

    {

     num++;

     System.out.println("/n皇后擺放第" + num + "種方案:");

     System.out.println("行分別爲1 2 3 4 5 6 7 8 ");

     System.out.print("列分別爲");

     for (int i1 = 0; i1 < 8; i1++)

      System.out.print(queenline[i1] + " ");

    }

    col[j] = true; // 修改安全標誌,回溯

    diagonal[i - j + 7] = true;

    undiagonal[i + j] = true;

   }

  }

 }

 public static void main(String[] args) {

  Queen q = new Queen();

  System.out.println("////八皇后問題////");

  q.num = 0; // 方案初始化

  for (int i = 0; i < 8; i++)

   // 置所有列爲安全

   q.col[i] = true;

  for (int i0 = 0; i0 < 16; i0++)

   // 置所有對角線爲安全

   q.diagonal[i0] = q.undiagonal[i0] = true;

  q.solve(1);

 }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章