Java学习-双重循环打印多边形、三重循环的应用

打印各种形状

【1】长方形:

 
  1.                 for(int j=1;j<=4;j++){//j:控制行数
  2.                         //*********
  3.                         for(int i=1;i<=9;i++){//i:控制*的个数
  4.                                 System.out.print("*");
  5.                         }
  6.                         //换行:
  7.                         System.out.println();
  8.                 }

【2】距离前面有一定空隙的长方形:

  1.                for(int j=1;j<=4;j++){//j:控制行数
  2.                         //加入空格:
  3.                         for(int i=1;i<=5;i++){//i:控制空格的个数
  4.                                 System.out.print(" ");
  5.                         }
  6.                         //*********
  7.                         for(int i=1;i<=9;i++){//i:控制*的个数
  8.                                 System.out.print("*");
  9.                         }
  10.                         //换行:
  11.                         System.out.println();
  12.                 }

【3】平行四边形:

  1. for(int j=1;j<=4;j++){//j:控制行数
  2.                         //加入空格:
  3.                         for(int i=1;i<=(9-j);i++){//i:控制空格的个数
  4.                                 System.out.print(" ");
  5.                         }
  6.                         //*********
  7.                         for(int i=1;i<=9;i++){//i:控制*的个数
  8.                                 System.out.print("*");
  9.                         }
  10.                         //换行:
  11.                         System.out.println();
  12.                 }

【4】三角形:

  1. for(int j=1;j<=4;j++){//j:控制行数
  2.                         //加入空格:
  3.                         for(int i=1;i<=(9-j);i++){//i:控制空格的个数
  4.                                 System.out.print(" ");
  5.                         }
  6.                         //*********
  7.                         for(int i=1;i<=(2*j-1);i++){//i:控制*的个数
  8.                                 System.out.print("*");
  9.                         }
  10.                         //换行:
  11.                         System.out.println();
  12.                 }

【5】菱形:

  1. //上面三角形:
  2.                 for(int j=1;j<=4;j++){//j:控制行数
  3.                         //加入空格:
  4.                         for(int i=1;i<=(9-j);i++){//i:控制空格的个数
  5.                                 System.out.print(" ");
  6.                         }
  7.                         //*********
  8.                         for(int i=1;i<=(2*j-1);i++){//i:控制*的个数
  9.                                 System.out.print("*");
  10.                         }
  11.                         //换行:
  12.                         System.out.println();
  13.                 }
  14.                
  15.                 //下面三角形:
  16.                 for(int j=1;j<=3;j++){//j:控制行数
  17.                         //加入空格:
  18.                         for(int i=1;i<=(j+5);i++){//i:控制空格的个数
  19.                                 System.out.print(" ");
  20.                         }
  21.                         //*********
  22.                         for(int i=1;i<=(7-2*j);i++){//i:控制*的个数
  23.                                 System.out.print("*");
  24.                         }
  25.                         //换行:
  26.                         System.out.println();
  27.                 }

【6】空心菱形:

  1. //上面三角形:
  2.                 for(int j=1;j<=4;j++){//j:控制行数
  3.                         //加入空格:
  4.                         for(int i=1;i<=(9-j);i++){//i:控制空格的个数
  5.                                 System.out.print(" ");
  6.                         }
  7.                         //*********
  8.                         for(int i=1;i<=(2*j-1);i++){//i:控制*的个数
  9.                                 if(i==1||i==(2*j-1)){
  10.                                         System.out.print("*");
  11.                                 }else{
  12.                                         System.out.print(" ");
  13.                                 }
  14.                         }
  15.                         //换行:
  16.                         System.out.println();
  17.                 }
  18.                
  19.                 //下面三角形:
  20.                 for(int j=1;j<=3;j++){//j:控制行数
  21.                         //加入空格:
  22.                         for(int i=1;i<=(j+5);i++){//i:控制空格的个数
  23.                                 System.out.print(" ");
  24.                         }
  25.                         //*********
  26.                         for(int i=1;i<=(7-2*j);i++){//i:控制*的个数
  27.                                 if(i==1||i==(7-2*j)){
  28.                                         System.out.print("*");
  29.                                 }else{
  30.                                         System.out.print(" ");
  31.                                 }
  32.                         }
  33.                         //换行:
  34.                         System.out.println();
  35.                 }

扩展:菱形打印方式2

【1】实心菱形:

  1. public class TestFor14{
  2.     public static void main(String[] args){
  3.                 //先打印出一个正方形,然后某些位置上打印* 某些位置上打印空格:
  4.                 int size = 17;
  5.                 int startNum = size/2+1;//起始列号
  6.                 int endNum = size/2+1;//结束列号
  7.                 //引入一个布尔类型的变量---》理解为“开关”
  8.                 boolean flag = true;
  9.                 for(int j=1;j<=size;j++){
  10.                         //*****
  11.                         for(int i=1;i<=size;i++){
  12.                                 if(i>=startNum&&i<=endNum){
  13.                                         System.out.print("*");
  14.                                 }else{
  15.                                         System.out.print(" ");
  16.                                 }
  17.                         }
  18.                         //换行
  19.                         System.out.println();
  20.                         if(endNum==size){
  21.                                 flag = false;
  22.                         }
  23.                        
  24.                         if(flag){//flag是true相当于在菱形的上半侧   flag是false相当于在菱形的下半侧
  25.                                 startNum--;
  26.                                 endNum++;
  27.                         }else{
  28.                                 startNum++;
  29.                             endNum--;
  30.                         }
  31.                 }
  32.         }
  33. }

【2】空心菱形:

  1. public class TestFor14{
  2.     public static void main(String[] args){
  3.                 //先打印出一个正方形,然后某些位置上打印* 某些位置上打印空格:
  4.                 int size = 17;
  5.                 int startNum = size/2+1;//起始列号
  6.                 int endNum = size/2+1;//结束列号
  7.                 //引入一个布尔类型的变量---》理解为“开关”
  8.                 boolean flag = true;
  9.                 for(int j=1;j<=size;j++){
  10.                         //*****
  11.                         for(int i=1;i<=size;i++){
  12.                                 if(i==startNum||i==endNum){
  13.                                         System.out.print("*");
  14.                                 }else{
  15.                                         System.out.print(" ");
  16.                                 }
  17.                         }
  18.                         //换行
  19.                         System.out.println();
  20.                         if(endNum==size){
  21.                                 flag = false;
  22.                         }
  23.                        
  24.                         if(flag){//flag是true相当于在菱形的上半侧   flag是false相当于在菱形的下半侧
  25.                                 startNum--;
  26.                                 endNum++;
  27.                         }else{
  28.                                 startNum++;
  29.                             endNum--;
  30.                         }
  31.                 }
  32.         }
  33. }

三重循环

百钱买百鸡

【1】二重循环可以帮我们解决:二元一次方程组的问题:

  1. public class TestFor15{
  2.     public static void main(String[] args){
  3.                 for(int a=1;a<=5;a++){
  4.                         for(int b=3;b<=6;b++){
  5.                                 if(a+b==7){
  6.                                         System.out.println(a+"----"+b);
  7.                                 }
  8.                         }
  9.                 }
  10.         }
  11. }

【2】三重循环可以帮我们解决:三元一次方程组的问题:

  1. public class TestFor16{
  2.     public static void main(String[] args){
  3.                 /*
  4. 百钱买百鸡:
  5. 公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,
  6. 100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。
  7. 数学:
  8. 设未知数:
  9. 公鸡:x只
  10. 母鸡:y只
  11. 小鸡:z只
  12. x+y+z=100
  13. 5x+3y+z/3=100
  14.                 麻烦方式:
  15.                 for(int x=1;x<=100;x++){
  16.                         for(int y=1;y<=100;y++){
  17.                                 for(int z=1;z<=100;z++){
  18.                                         if((x+y+z==100)&&(5*x+3*y+z/3==100)&&(z%3==0)){
  19.                                                 System.out.println(x+"\t"+y+"\t"+z);
  20.                                         }
  21.                                 }
  22.                         }
  23.                 }
  24.                 */
  25.                 //优化:
  26.                 for(int x=1;x<=19;x++){
  27.                         for(int y=1;y<=31;y++){
  28.                                 int z = 100-x-y;
  29.                                 if((5*x+3*y+z/3==100)&&(z%3==0)){
  30.                                         System.out.println(x+"\t"+y+"\t"+z);
  31.                                 }
  32.                         }
  33.                 }
  34.         }
  35. }
### 回答1: 可以使用以下代码来判断一个点是否在多边形内: ``` import java.awt.geom.Path2D; public class Main { public static boolean isPointInPolygon(double x, double y, double[] polyX, double[] polyY, int numPoints) { Path2D polygon = new Path2D.Double(); polygon.moveTo(polyX[0], polyY[0]); for (int i = 1; i < numPoints; i++) { polygon.lineTo(polyX[i], polyY[i]); } polygon.closePath(); return polygon.contains(x, y); } public static void main(String[] args) { double[] polyX = {0, 10, 10, 0}; double[] polyY = {0, 0, 10, 10}; int numPoints = 4; double x = 5; double y = 5; boolean isInPolygon = isPointInPolygon(x, y, polyX, polyY, numPoints); System.out.println(isInPolygon); } } ``` 上面的代码使用了 `java.awt.geom.Path2D` 类来表示多边形,并使用 `contains` 方法来判断一个点是否在多边形内。 在上面的代码中,`polyX` 和 `polyY` 数组分别表示多边形的顶点的横纵坐标,`numPoints` 表示多边形的顶点数,`x` 和 `y` 分别表示要判断的点的横纵坐标。 在这段代码的主函数中,我们可以看到一个四边形被定义为:顶点坐标为(0,0)、(10,0)、(10,10)和(0,10)的四边形。然后我们判断了坐标为(5,5)的点是否在这个四边形内,最后将结果输出到控制台。 请注意,上面的代码只 ### 回答2: 要判断一个点是否在多边形内部,我们可以使用射线法或者奇偶规则。 使用射线法: 1. 遍历多边形的所有边。 2. 如果点在多边形的边上,则返回true。 3. 统计与射线相交的边的数量。如果为奇数,则点在多边形内部;如果为偶数,则点在多边形外部。 使用奇偶规则: 1. 创建一个计数器,初始值为0。 2. 遍历多边形的所有边。 3. 如果点在多边形的边上,则返回true。 4. 如果点在多边形边的左边,计数器加一;如果点在多边形边的右边,计数器减一。 5. 如果计数器最终为0,则点在多边形外部;如果计数器不为0,则点在多边形内部。 以下是使用奇偶规则的Java代码示例: ```java public boolean isPointInPolygon(Point point, List<Point> polygon) { int count = 0; int n = polygon.size(); for (int i = 0; i < n; i++) { Point p1 = polygon.get(i); Point p2 = polygon.get((i + 1) % n); // 点在多边形的边上 if (isPointOnLine(point, p1, p2)) { return true; } // 点在多边形边的左边 if (point.y > Math.min(p1.y, p2.y) && point.y <= Math.max(p1.y, p2.y) && point.x <= Math.max(p1.x, p2.x) && p1.y != p2.y) { double xIntersection = (double) (point.y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y) + p1.x; if (p1.x == p2.x || point.x <= xIntersection) { count++; } } } return count % 2 != 0; } public boolean isPointOnLine(Point point, Point p1, Point p2) { return point.x >= Math.min(p1.x, p2.x) && point.x <= Math.max(p1.x, p2.x) && point.y >= Math.min(p1.y, p2.y) && point.y <= Math.max(p1.y, p2.y) && (p2.y - p1.y) * (point.x - p1.x) == (p2.x - p1.x) * (point.y - p1.y); } ``` 在上述代码中,`Point`表示一个点的坐标,`isPointInPolygon`方法用于判断点是否在多边形内,`isPointOnLine`方法用于判断点是否在多边形的边上。输入参数`point`为要判断的点的坐标,`polygon`为多边形的顶点坐标列表。方法返回`true`表示点在多边形内部,返回`false`表示点在多边形外部。 ### 回答3: 要判断一个点是否在多边形内,可以使用射线法或射线交点法。以下是一个使用射线法判断点是否在多边形内的Java代码实现: ```java public class PointInPolygon { // 使用射线法判断点是否在多边形内 public static boolean isPointInPolygon(Point2D.Double point, List<Point2D.Double> polygon) { int count = 0; for (int i = 0, j = polygon.size() - 1; i < polygon.size(); j = i++) { if ((polygon.get(i).getY() > point.getY()) != (polygon.get(j).getY() > point.getY()) && (point.getX() < (polygon.get(j).getX() - polygon.get(i).getX()) * (point.getY() - polygon.get(i).getY()) / (polygon.get(j).getY() - polygon.get(i).getY()) + polygon.get(i).getX())) { count++; } } return count % 2 == 1; } public static void main(String[] args) { List<Point2D.Double> polygon = new ArrayList<>(); polygon.add(new Point2D.Double(1, 1)); polygon.add(new Point2D.Double(1, 5)); polygon.add(new Point2D.Double(5, 5)); polygon.add(new Point2D.Double(5, 1)); Point2D.Double point = new Point2D.Double(3, 3); boolean isInside = isPointInPolygon(point, polygon); System.out.println("Point is inside polygon: " + isInside); } } ``` 这段代码中的`isPointInPolygon`方法接受一个`Point2D.Double`类型的点和一个`List<Point2D.Double>`类型的多边形作为参数,返回一个布尔值表示点是否在多边形内。通过遍历多边形的边,计算与射线相交的次数,如果次数为奇数,则点在多边形内,否则点在多边形外。在`main`方法中创建了一个四边形多边形和一个点,并调用`isPointInPolygon`方法进行判断,并打印结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值