Java 如何用二维数组创建空心菱形

 更新时间:2022年03月02日 15:00:29   作者:StrKai  
这篇文章主要介绍了Java 如何用二维数组创建空心菱形,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

如何用二维数组创建空心菱形

提供一个我自己的实现方法,方法实现只是一个人的是靠方式,并不是代表实力,真正的实力用自己的这种思维解决别人亟待解决的问题,真才是目前我觉得的编程的意义。鸡汤喝了,精神好了!来看看我的实例。

题目:用“*”创建一个菱形空心

为了能更好的找出横纵坐标的关系,我简单做了一个菱形图

图1.菱形

从图中可以找出*点与坐标值的意义,所以此题是用二维坐标来做的;

分两部分输出图像, 上半部分:

从中间开花,给两边的值赋值为1,否则为0,最后给赋值为1的点输出*号;

  • 定义二维数组的位 int []a=new int [13][13];
  • 定义列方向上的两个点,p1,p2,即a[i][p1],a[i][p2];  

所以由图2,可知   A ,B,C点可以知道p1=a.length/2-i(在编程过程中i是0,a.length/2是6也是一行中的中点),p2=a.length/2+i; B(i,p1),C(i,p2);

图2.菱形

为什么分两部分,因为在a.lengh/2-i  ,在i等于7的时候得负了,所以并不能一直使用原来的p1,p2的值,需要重新找好横纵坐标的规律。

下半部分:

D的坐标是(i,i-a.length/2),即D(i,p3),E的坐标比较难找到关系,我也是想了很久,呵呵就是一直试,最后没办法试不出来,还是画图做分析才找到规律的,所以科学的方法是要用数学的思维,找横纵坐标点的位置关系;

图3 E点坐标分析

具体实现代码:

package com.JavaBase; 
public class lingxing {
	// 菱形
 
	public static void main(String[] args) {
		int n = 15;//n只能是奇数
		int[][] a = new int[n][n];
		for (int i = 0; i < a.length; i++) {
			for (int j = 0; j < a[i].length; j++) {
				a[i][j] = 0;
				int p1 = a.length / 2 - i;
				int p2 = a[i].length / 2 + i;//p1,p2的规律非常好找
				if (i <= a.length / 2) {//上半部分
					a[i][p1] = 1;
					a[i][p2] = 1;
					if (a[i][j] == 1) {
						System.out.print("*");
					} else {
						System.out.print(" ");
					}
				} else {//下半部分
					int p3 = i - a.length / 2;//与p1相反
					int p4 = a.length - (i - a.length / 2) - 1;//p4的规律比较难找到
					a[i][p3] = 1;
					a[i][p4] = 1;
					if (a[i][j] == 1) {
						System.out.print("*");
					} else {
						System.out.print(" ");
					}
				}
			}
			System.out.println();
		}
	}
}

 给予借鉴和思考,方法有很多,不单只有这种,也许你的改进之后会更好。

使用数组打印实心菱形

输出如图所示的图像

思路创建一个二维方形数组,写出正方形的四个角,之后用stringbuffer中的append进行替换

知识点:

输入Scanner sc = new Scanner(System.in);  想要转换成int数要  int num =sc.nextInt();

二维数组的输出(其中一种方法)

for(int i=0;i<array.length;i++)  
	     {  
	         for(int j=0;j<array[i].length;j++)  
	         {  
	             System.out.print(array[i][j]+" ");  
	         }  
	         System.out.println();  //换行  
	     }  

正式代码

import java.util.Scanner; 
public class text_2 {
	public static void main(String[] args){
		System.out.println("请输入数组维度");
		Scanner sc = new Scanner(System.in);
		int num =sc.nextInt();
		text_2.printstart(num);			
	}
	public static void printstart(int n){
		int[][] array = new int[n][n];
		for (int row = 0;row<n/2;row++){
			for(int line = 0;line <(n/2-row);line++){
				array[row][line]=1;
				array[row][n-line-1]=1;
				array[n-row-1][line]=1;
				array[n-row-1][n-line-1]=1;
			}
		}
		for(int i=0;i<array.length;i++)  
	     {  
	         for(int j=0;j<array[i].length;j++)  
	         {  
	             System.out.print(array[i][j]+" ");  
	         }  
	         System.out.println();  //换行  
	     }  
		for(int row=0;row<n;row++){
			StringBuilder column = new StringBuilder();
			for(int line= 0;line<n;line++){
				if(array[row][line]==1){
					column.append("  ");
				}else{
					column.append("*");
				}
			}System.out.println(column);
		}
	}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java源码阅读之java.lang.Object

    java源码阅读之java.lang.Object

    这篇文章主要介绍了java源码阅读之java.lang.Object,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Java字节流与基本数据类型的转换实例

    Java字节流与基本数据类型的转换实例

    本篇文章主要介绍了Java字节流与基本数据类型的转换实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • SpringCloud Eureka实现服务注册与发现

    SpringCloud Eureka实现服务注册与发现

    Eureka是一种基于REST(具像状态传输)的服务,主要用于AWS云中定位服务,以实现中间层服务器的负载平衡和故障转移。本文记录一个简单的服务注册与发现实例。感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 关于ireport中传入list的处理方式

    关于ireport中传入list的处理方式

    这篇文章主要介绍了关于ireport中传入list的处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Java中抽象类和接口的区别_动力节点Java学院整理

    Java中抽象类和接口的区别_动力节点Java学院整理

    java抽象类和接口最本质的区别是接口里不能实现方法--接口中的方法全是抽象方法。抽象类中可实现方法--抽象类中的方法可以不是抽象方法,下文给大家简单介绍下,需要的的朋友参考下
    2017-04-04
  • SpringBoot中的手动提交事务

    SpringBoot中的手动提交事务

    在Spring框架中使用@Transactional注解通常管理事务,但在多线程环境下此方法失效,本文讨论了手动事务的必要性及其实现方式,探讨了Spring的七种事务传播行为和数据库的四大特性与隔离级别,了解这些可以帮助开发者在无法使用声明式事务时
    2024-09-09
  • mybatis-4 mybatis与spring结合使用及原理解析

    mybatis-4 mybatis与spring结合使用及原理解析

    本文通过图文并茂的形式给大家介绍了mybatis-4 mybatis与spring结合使用及原理解析,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-04-04
  • MyBatis无缝转MyBatis-plus的基本使用

    MyBatis无缝转MyBatis-plus的基本使用

    本文介绍了使用MyBatis-plus来优化MyBatis的使用,包括引入依赖、改造Mapper、实体类注解使用、Service层方法改造等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • Spring-data-redis操作redis知识总结

    Spring-data-redis操作redis知识总结

    这篇文章主要介绍了Spring-data-redis操作redis知识总结,spring-data-redis是spring-data模块的一部分,专门用来支持在spring管理项目对redis的操作。
    2017-04-04
  • JVM的常用命令汇总

    JVM的常用命令汇总

    监测java应用,最方便的就是直接使用jdk提供的现成工具,在jdk的安装的bin目录下,已经提供了多种命令行监测工具。本文为大家总结了几个JVM的常用命令,需要的可以参考一下
    2022-10-10

最新评论