Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 图形的绘制_Java - Fatal编程技术网

Java 图形的绘制

Java 图形的绘制,java,Java,给定一个整数数组,我需要显示一个表示每个整数的图。 例如,给定一个数组{2,4,6,-3,-4,5,-1,-2,3},控制台上的输出应该如下所示: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 我采用了矩阵方法,但到目前为止,我只能实现所需

给定一个整数数组,我需要显示一个表示每个整数的图。 例如,给定一个数组{2,4,6,-3,-4,5,-1,-2,3},控制台上的输出应该如下所示:

     *     
     *     *
   * *     *
   * *     *     *
 * * *     *     *
 * * *     *     *
       * *   * *
       * *     *
       * * 
         *
我采用了矩阵方法,但到目前为止,我只能实现所需图形的水平版本(更精确地说,是所需图形的90°顺时针旋转版本)。 如何将图形逆时针旋转90°以获得所需的结果?我尝试转置我的结果矩阵,但随后图形变成了所需结果的精确倒数

这是密码

public static char[][] plot(int[] array) {

    int max = Integer.MIN_VALUE;
    int min = Integer.MAX_VALUE;
    for (int i = 0; i < array.length; i++) {
        if (array[i] > max) {
            max = array[i];
        }
        if (array[i] < min) {
            min = array[i];
        }
    }

    if (min < 0) {
        min *= (-1);
    }

    char[][] tempArray = new char[array.length][max + min + 1];

    for (int i = 0; i < tempArray.length; i++) {
        if (array[i] > 0) {
            for (int j = (min + 1); j <= min + array[i]; j++) {
                tempArray[i][j] = '*';
            }
            System.out.println();
        } else {
            for (int j = min - 1; j >= min + array[i]; j--) {
                tempArray[i][j] = '*';
            }
        }
    }
    return tempArray;
}
public static void main(String...s){
  int[] arr = {2,4,6,-3,-4,5,-1,-2,3};
  System.out.println(Arrays.deepToString(plot(arr)));
}
publicstaticchar[]plot(int[]array){
int max=整数的最小值;
int min=整数最大值;
for(int i=0;imax){
max=数组[i];
}
if(数组[i]0){
对于(int j=(min+1);j=min+array[i];j--){
tempArray[i][j]='*';
}
}
}
返回数组;
}
公共静态无效主(字符串…s){
int[]arr={2,4,6,-3,-4,5,-1,-2,3};
System.out.println(Arrays.deepToString(plot(arr));
}
此外,我无法很好地格式化输出矩阵(我仍在研究那里发生了什么),因此我使用了array.deeptoString()

我制作了自己的绘图仪(
plot0
),它逐字符、逐行直接写入输出流:

private static void plot0(final int... numbers) {

    final int cols = numbers.length;
    final IntSummaryStatistics stat = Arrays.stream(numbers).summaryStatistics();
    final int max = stat.getMax();
    final int min = stat.getMin();

    final int rows;
    if (min < 0) {
        rows = Math.max(0, max) + ~min + 2;
    } else {
        rows = max;
    }

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

        final int val = Math.max(0, max) - i;
        if (0 == val) {

            continue; // do not plot zero
        }

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

            final int num = numbers[j];
            System.out.print(
                    0 < num && 0 < val && num >= val
                            || 0 > num && 0 > val && num <= val
                                    ? '*'
                                    : ' ');
        }
        System.out.println();
    }
}
我制作了自己的绘图仪(
plot0
),它可以逐字符、逐行直接写入输出流:

private static void plot0(final int... numbers) {

    final int cols = numbers.length;
    final IntSummaryStatistics stat = Arrays.stream(numbers).summaryStatistics();
    final int max = stat.getMax();
    final int min = stat.getMin();

    final int rows;
    if (min < 0) {
        rows = Math.max(0, max) + ~min + 2;
    } else {
        rows = max;
    }

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

        final int val = Math.max(0, max) - i;
        if (0 == val) {

            continue; // do not plot zero
        }

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

            final int num = numbers[j];
            System.out.print(
                    0 < num && 0 < val && num >= val
                            || 0 > num && 0 > val && num <= val
                                    ? '*'
                                    : ' ');
        }
        System.out.println();
    }
}

如果你得到错误的结果,交换j和i。如果这仍然是反向的错误循环(减少循环而不是增加循环)。请在问题中包含一个可以由其他人编译和测试的循环,该循环显示网格是如何打印的,以及您得到的结果有什么问题。另外,在你的帖子中添加一个实际问题,你还没有问任何问题。但是要注意。提示:交换维度。第一个维度(行)应与数字的值相对应,第二个维度(列)应与给定数组中数字的位置相对应。@KevinAnderson您是说更改此代码还是编写新代码?更改还是重写?选择对你来说比较容易的。如果你得到错误的结果,交换j和i。如果这仍然是反向的错误循环(减少循环而不是增加循环)。请在问题中包含一个可以由其他人编译和测试的循环,该循环显示网格是如何打印的,以及您得到的结果有什么问题。另外,在你的帖子中添加一个实际问题,你还没有问任何问题。但是要注意。提示:交换维度。第一个维度(行)应与数字的值相对应,第二个维度(列)应与给定数组中数字的位置相对应。@KevinAnderson您是说更改此代码还是编写新代码?更改还是重写?随便你挑吧,哪一个对你来说比较容易。