“更好的代码”+用户输入

时间:2017-10-25 14:26:07

标签: java input

所以我刚创建了一个小程序,在要求用户输入Box的特定高度和宽度后打印出一盒星星,例如: 身高:4; width:5将打印出来 Starbox:

enter image description here

这是我的代码

import java.util.*;
public class Stars {
    public static Scanner scan = new Scanner(System.in);
    public static int height = scan.nextInt();
    public static Scanner scan2 = new Scanner(System.in);
    public static int width = scan.nextInt();
    public static void main(String[] args) {
        drawBox(height, width);
    }
    public static void drawBox(int height, int width) {
        drawStars(width);
        drawStarsWithSpaces(height, width);
        drawStars(width);
    }
    public static void drawStars(int width) {
        for (int i = 0; i < width; i++) {
            System.out.print("*");
        }
        System.out.println();
    }
    public static void drawStarsWithSpaces(int height, int width) {
        for (int x = 0; x < height - 2; x++) {
            System.out.print("*");
            for (int i = 0; i < width - 2; i++) {
                System.out.print(" ");
            }
            System.out.print("*");
            System.out.println();
        }
    }
}

我现在的第一个问题是,当我启动程序时,如何实现一个文本说“盒子的高度”和之后的“盒子的宽度”,这样用户就知道要输入什么。

接下来我听说,由于某些原因不使用全局变量,我应该只在main方法之后实现代码......但具有这些要求的程序代码是什么样的?

1 个答案:

答案 0 :(得分:1)

首先,您不需要两个Scanner。一个就够了。

其次,对您的代码的评论是正确的 - 如果不需要static变量,那么使用main变量被认为是不好的做法(这就是您所谓的'全局')。

这些值应该是public static void main(String[] args) { Scanner input = new Scanner(System.in); int width = input.nextInt(), height.nextInt(); ... } 函数的内部函数(应该读取值并调用相应的函数,因此应该在其中声明和使用它们,而不是在它之外。) 它看起来像是:

main

至于仅在width之后运行代码:您在减速时初始化heightstatic。当它们被声明为main时,它们会在课程加载时初始化 在nextInt()有机会参加之前!
这也被认为是不好的做法 还有一件事 - 这意味着你不能在static发生之前运行任何代码(好吧,你可以使用打印所需的方法初始化另一个main变量指令...)。

总结:
将您使用的所有变量设为System.out.println(),然后在扫描下一个输入之前打印(使用main)您想要的任何内容(因为扫描将在width=100%本身进行。