空问题需要解释

mos*_*gdy 6 java

我是编程和Java的新手,这是我的第一个null,我有点困惑,因为我不知道发生了什么是编码中的那种错误?还是别的什么?请在这种情况下需要您的解释,并在整体上以简单的方式解决null

public static void main(String[] args) {
    Scanner input = new Scanner (System.in);
    System.out.println("Enter grades size :");

    int Size = input.nextInt();

    String[] y = new String[Size];
    int[] x = new int[Size];

    int Max = 0;
    int Min = x[0];

    String Max_studen = y[0];
    String Min_studen = y[0];

    for (int i = 0 ; i < Size ; i++) {
        System.out.println("Enter student name #" + (i));
        y[i] = input.next();

        System.out.println("Enter student grade : #" + (i));
        x[i] = input.nextInt();

        if (x[i] > Max) {
            Max = x[i];
            Max_studen = y[i];
        } else if (x[i] < Min) {
            Min = x[i];
            Min_studen = y[i];
        }
    }

    System.out.println("Max Student is: " + Max_studen);
    System.out.println("Max grade is: ");
    System.out.println(Max);
    System.out.println("Min Student is: " + Min_studen);
    System.out.println("Min grade is : ");
    System.out.println(Min);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Enter grades size :
2
Enter student name #0
Sam
Enter student grade : #0
85
Enter student name #1
Samy
Enter student grade : #1
95
Max Student is: Samy
Max grade is:
95
Min Student is: null
Min grade is :
0 
Run Code Online (Sandbox Code Playgroud)

Tur*_*g85 8

对于初学者来说,这是一个棘手的问题.让我带你走过这个.

第一个重要的是那些:

String[] y = new String[Size];
int[] x = new int[Size];
Run Code Online (Sandbox Code Playgroud)

这两个阵列之间存在重大差异.x是一个基元数组,y而是一个对象数组.基元在Java中具有明确定义的默认值(通常0),因此x使用包含a的所有单元初始化数组0.对于对象,没有默认值.由于您可以编写自己的类,因此Java不知道什么是良好的默认值,例如a Car.因此,对象null默认值是.目前,想象null一下" 这个细胞是空的 " 1.这意味着每个单元格都y包含在内null.

现在到下一个重要的路线:

int Min = x[0];
[...]
String Min_studen = y[0];
Run Code Online (Sandbox Code Playgroud)

如前所述,x已全部初始化0.从此结束,Min现在0.这里有一个问题,因为在典型情况下,您永远不会输入成绩< 0,因此Min永远不会被覆盖.在genereal中,如果您正在寻找一些最小值/最大值,您应该使用Integer.MIN_VALUE(最大值)或Integer.MAX_VALUE(最小值)初始化它们.还有类似的常数long,floatdouble.这些常数通常可以避免给定问题.既然Min永远不会被覆盖,Min_studen也永远不会被覆盖.初始值ynulls,也就是Min_studen值.

您对代码的一些评论:

  • 变量名称应该写在camelCase中.
  • 所述[]阵列的通常写入以下的类型,没有空白:String[]代替String [].
  • 在a之后{,应该总是有一个换行符.
  • 变量名称应该是有意义的和描述性的.你可以使用studentGradesstudentNames不是xy.

有许多网站解释编码惯例和风格指南,其中一些在这里这里 2.你现在可能不想看它们,但是如果你掌握了Java的基础知识并阅读它们,请记住它们.


1实际意义与null我给出的描述非常接近,但推理有点复杂,需要知道堆和堆栈存储以及存储在哪里.

2没有"风格"这样的东西.您当然可以自由定义自己的.样式指南是一种使代码更易于阅读的方法.每当您更改样式指南或部分样式指南时,请记住这一点.