新手/小白看/java 一些基础问题

帮某某人看一下java 的问题 ,毕竟某某人这不是开始学Java了嘛,这玩意我都弃坑多少年了。Java很好,但,我选择python 。毕竟,我Java 半吊子水平,毕竟。我现在只是个弱小无助的云计算运维,现在学Java 真的很劝退,大概相当于49年入xx,懂我的意思吧,有一说一,某某人在Java挺有天赋的,我当时学Java就是死学,某某人不仅迅速理解,竟然还举一反三?直接把我干沉默了,呜呜呜,我仿佛经历了如面试时 的 拷打 直接痛苦面具戴在脸上。

### 错误和修复

问题1.

因为我图片转文字复制,有的字母没复制上,,,所以,

我后面看到的代码,是这个样子的:

int choose =scanner.nextInt():if(choose==1){
                                                  String[] nameArr;double[] scoreArr;
                              nameArr = new String[5];
                              scoreArr =new double[5];
                for(inti=1;i<=5;i++){System.out.println("请输入学生姓名:")

String name = scanner.nextLine();nameArr[i] = name; 

}

for(inti=0;i<5;i++){System.out.println("请输入学生成绩:");double score =scanner.nextDouble();

}

}
 

所以,就排查了以下错误 因为我复制有的字母没复制上所以正常也报错了

1.1.1. **语法错误**:

     `int choose =scanner.nextInt():` 应该是 `int choose = scanner.nextInt();` 使用分号而不是冒号。

     `for(inti=1;i<=5;i++)` 中的 `inti` 应该是 `int i`。

    `System.out.println("请输入学生姓名:")` 这行代码缺少分号,应该是 `System.out.println("请输入学生姓名:");`。

    `String name = scanner.nextLine();nameArr[i] = name;` 应该拆成两行,或者添加分号。

    数组索引应该从0开始,而不是从1开始。

1.1.2. **逻辑错误**:

    - 在读取成绩时,应该检查输入的顺序和类型。

  `scanner.nextLine()` 在`scanner.nextInt()`之后直接使用可能会导致跳过输入,

     因为 `nextInt()` 不会读取换行符,而 `nextLine()` 会读取换行符。

1.2 改进后的代码    

```java   ```  这代表全文注释 你在写代码时可以删掉

```java

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int choose = scanner.nextInt();

        

        if (choose == 1) {

            String[] nameArr = new String[5];

            double[] scoreArr = new double[5];

            // Consume the leftover newline

            scanner.nextLine();

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

                System.out.println("请输入学生姓名:");

                String name = scanner.nextLine();

                nameArr[i] = name;

            }

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

                System.out.println("请输入学生成绩:");

                double score = scanner.nextDouble();

                scoreArr[i] = score;

            }

        }

        scanner.close();

    }

}

```

### 解释

1. **`scanner.nextLine()`**:在读取整数后,我添加了一行 `scanner.nextLine();` 来消费掉换行符。这是为了防止 `nextLine()` 读取到空字符串而跳过输入。

2. **数组索引从0开始**:确保数组索引从0开始,而不是1。

3. **代码格式化**:保持代码清晰和易读,适当使用空行分隔不同的逻辑块。

1.3以下刚刚那个改进后代码的逐行解释:

public class Main {

    // 定义一个名为Main的公共类,这是Java应用程序的入口类。

    

    public static void main(String[] args) {

        // main方法是Java程序的入口点。它是程序开始执行的地方。

        Scanner scanner = new Scanner(System.in);

        // 创建一个Scanner对象,用于从标准输入流(通常是键盘)读取用户输入。

        int choose = scanner.nextInt();

        // 读取用户输入的整数,并将其存储在变量choose中。

        

        if (choose == 1) {

            // 如果用户输入的整数等于1,则执行以下代码块。

            String[] nameArr = new String[5];

            // 创建一个长度为5的字符串数组,用于存储学生的姓名。

            double[] scoreArr = new double[5];

            // 创建一个长度为5的双精度数组,用于存储学生的成绩。

            

            // Consume the leftover newline

            scanner.nextLine();

            // 读取并丢弃前一个nextInt()留下的换行符,以便后续可以正确读取字符串。

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

                // 使用for循环重复执行以下代码5次,每次循环变量i的值从0增加到4。

                System.out.println("请输入学生姓名:");

                // 输出提示信息,要求用户输入学生姓名。

                String name = scanner.nextLine();

                // 从标准输入读取一行文本(学生姓名),并将其存储在变量name中。

                nameArr[i] = name;

                // 将读取的姓名存储到nameArr数组的第i个位置。

            }

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

                // 使用for循环重复执行以下代码5次,每次循环变量i的值从0增加到4。

                System.out.println("请输入学生成绩:");

                // 输出提示信息,要求用户输入学生成绩。

                double score = scanner.nextDouble();

                // 从标准输入读取一个双精度浮点数(学生成绩),并将其存储在变量score中。

                scoreArr[i] = score;

                // 将读取的成绩存储到scoreArr数组的第i个位置。

            }

        }

        

        scanner.close();

        // 关闭Scanner对象,释放与Scanner关联的所有资源。

    }

}

### 总结

*类定义**:`public class Main`定义了一个公共类,这是Java程序的入口。

**main方法**:`public static void main(String[] args)`是程序的入口点,所有程序从这里开始执行。

 **Scanner对象**:`Scanner scanner = new Scanner(System.in);`用于读取用户输入。

 **读取选择**:`int choose = scanner.nextInt();`读取用户的选择。

 **数组定义**:`String[] nameArr`和`double[] scoreArr`用于存储学生姓名和成绩。

 **消费换行符**:`scanner.nextLine();`用于清除`nextInt()`后遗留的换行符。

**读取姓名**:第一个`for`循环用于读取并存储5个学生的姓名。

 **读取成绩**:第二个`for`循环用于读取并存储5个学生的成绩。

**关闭Scanner**:`scanner.close();`用于释放输入资源。

问题2

2.1 完整代码:Java程序实现的学生成绩管理系统

# 该系统允许用户通过控制台输入选择不同的功能

import java.util.ArrayList;

import java.util.Scanner;

class Student {

    String name;

    double score;

    Student(String name, double score) {

        this.name = name;

        this.score = score;

    }

}

public class StudentManagementSystem {

    private static ArrayList<Student> students = new ArrayList<>();

    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {

        while (true) {

            showMenu();

            int choice = scanner.nextInt();

            scanner.nextLine(); // Consume newline

            switch (choice) {

                case 1:

                    addStudent();

                    break;

                case 2:

                    displayStudents();

                    break;

                case 3:

                    calculateAverage();

                    break;

                case 4:

                    findMaxAndMin();

                    break;

                case 5:

                    System.out.println("退出系统。");

                    scanner.close();

                    return;

                default:

                    System.out.println("无效输入,请重新选择。");

            }

        }

    }

    private static void showMenu() {

        System.out.println("\n学生成绩管理系统");

        System.out.println("1. 添加学生成绩");

        System.out.println("2. 显示所有学生成绩");

        System.out.println("3. 计算平均成绩");

        System.out.println("4. 查找最高分和最低分");

        System.out.println("5. 退出系统");

        System.out.print("请选择操作:");

    }

    private static void addStudent() {

        System.out.print("请输入学生姓名:");

        String name = scanner.nextLine();

        System.out.print("请输入学生成绩:");

        double score = scanner.nextDouble();

        scanner.nextLine(); // Consume newline

        students.add(new Student(name, score));

        System.out.println("学生成绩已添加。");

    }

    private static void displayStudents() {

        System.out.println("\n所有学生成绩:");

        for (Student student : students) {

            System.out.println("姓名:" + student.name + ",成绩:" + student.score);

        }

    }

    private static void calculateAverage() {

        if (students.isEmpty()) {

            System.out.println("没有学生信息。");

            return;

        }

        double sum = 0;

        for (Student student : students) {

            sum += student.score;

        }

        double average = sum / students.size();

        System.out.println("平均成绩:" + average);

    }

    private static void findMaxAndMin() {

        if (students.isEmpty()) {

            System.out.println("没有学生信息。");

            return;

        }

        Student maxStudent = students.get(0);

        Student minStudent = students.get(0);

        for (Student student : students) {

            if (student.score > maxStudent.score) {

                maxStudent = student;

            }

            if (student.score < minStudent.score) {

                minStudent = student;

            }

        }

        System.out.println("最高分:" + maxStudent.name + ",成绩:" + maxStudent.score);

        System.out.println("最低分:" + minStudent.name + ",成绩:" + minStudent.score);

    }

}

2.2完整代码的功能解释

- **添加学生成绩**:用户可以输入学生的姓名和成绩,并将其存储在ArrayList中。

- **显示所有学生成绩**:显示所有已添加的学生姓名和成绩。

- **计算平均成绩**:计算并显示所有学生的平均成绩。

- **查找最高分和最低分**:找出并显示所有学生中的最高分和最低分及其对应的学生姓名。

- **退出系统**:用户可以选择退出系统。

### 用户界面

程序提供了一个简单的用户界面,允许用户通过选择不同的功能(输入1到5)来操作系统。

2.3关于对 重点语句 每行的意思和作用的解释

2.3.1 重点语句 的源代码

import java.util.ArrayList;
import java.util.Scanner;

class Student {
String name;
double score;

Student(String name, double score) {

    this.name = name;

    this.score = score;

}

}

public class StudentManagementSystem {
private static ArrayList<Student> students = new ArrayList<>();
private static Scanner scanner = new Scanner(System.in);

public static void main(String[] args) {

    while (true) {

        showMenu();

        int choice = scanner.nextInt();

        scanner.nextLine(); // Consume newline

        switch (choice) {

            case 1:

                addStudent();

                break;

            case 2:

                displayStudents();

                break;

            case 3:

                calculateAverage();

                break;

            case 4:

                findMaxAndMin();

                break;

            case 5:

                System.out.println("退出系统。");

                scanner.close();

                return;

            default:

                System.out.println("无效输入,请重新选择。");

        }

    }

}

2.3.2逐行解释2.3.1的重点代码,如下              以确保每行代码的作用和意义都清楚。

```java   ```  这代表全文注释 你在写代码时可以删掉

import java.util.ArrayList;

import java.util.Scanner;

这两行代码导入了Java标准库中的`ArrayList`类和`Scanner`类,分别用于管理动态数组和从控制台读取用户输入。

class Student {

    String name;

    double score;

    Student(String name, double score) {

        this.name = name;

        this.score = score;

    }

}

这段代码定义了一个`Student`类,用于表示学生及其成绩。`Student`类有两个属性:`name`(字符串类型)和`score`(双精度浮点数)。构造函数`Student(String name, double score)`用于初始化这两个属性。

public class StudentManagementSystem {

    private static ArrayList<Student> students = new ArrayList<>();

    private static Scanner scanner = new Scanner(System.in);

上面这个方块内的代码解释如下:

`public class StudentManagementSystem`:定义了一个公共类`StudentManagementSystem`,用于实现学生成绩管理系统的功能。

 `private static ArrayList<Student> students = new ArrayList<>()`:定义了一个静态的、私有的`ArrayList`对象`students`,用于存储所有学生对象。

`private static Scanner scanner = new Scanner(System.in)`:定义了一个静态的、私有的`Scanner`对象`scanner`,用于从标准输入读取用户输入。

    public static void main(String[] args) {

        while (true) {

            showMenu();

            int choice = scanner.nextInt();

            scanner.nextLine(); // Consume newline

 `public static void main(String[] args)`:主方法,是程序的入口点。

 `while (true)`:开始一个无限循环,直到用户选择退出系统。`showMenu()`:调用`showMenu`方法,显示操作菜单。

-int choice = scanner.nextInt()`:读取用户输入的整数选择并存储在变量`choice`中。

 `scanner.nextLine()`:读取并丢弃整数输入后的换行符,防止影响后续的字符串输入。

            switch (choice) {

                case 1:

                    addStudent();

                    break;

                case 2:

                    displayStudents();

                    break;

                case 3:

                    calculateAverage();

                    break;

                case 4:

                    findMaxAndMin();

                    break;

                case 5:

                    System.out.println("退出系统。");

                    scanner.close();

                    return;

                default:

                    System.out.println("无效输入,请重新选择。");

            }

        }

    }

switch (choice)`:根据用户的选择执行不同的操作。

    case 1`: 调用`addStudent`方法,添加学生成绩。

    case 2`: 调用`displayStudents`方法,显示所有学生成绩。

    case 3`: 调用`calculateAverage`方法,计算并显示所有学生的平均成绩。

    case 4`: 调用`findMaxAndMin`方法,查找并显示最高分和最低分的学生。

    case 5`: 输出`退出系统。`,关闭`scanner`对象并退出程序。

    default`: 输出`无效输入,请重新选择。`,处理无效输入。

2.3.3  对重点语句  即2.3.1的重点代码,梳理之后

不看完整代码自己进行推导如下

虽没有提供完整的方法如:`showMenu`、`addStudent`、`displayStudents`、`calculateAverage`和`findMaxAndMin`,但我可以猜测有这些方法功能,以下是这些方法的可能定义:

 `showMenu`: 这个函数通常用于显示一个菜单,让用户可以选择不同的操作或功能。菜单可能包括各种选项,例如添加学生、显示学生列表、计算平均成绩等。

`addStudent`: 这个函数用于向系统中添加一个新的学生记录。通常会要求用户输入学生的相关信息,比如姓名、年龄、成绩等,并将这些信息保存在系统中。

 `displayStudents`: 这个函数用于显示所有学生的信息列表。它会从系统中获取所有学生的记录,并将它们以某种形式展示给用户,比如以表格或列表的形式。

`calculateAverage`: 这个函数用于计算所有学生的平均成绩。它会获取每个学生的成绩信息,然后对它们进行加总并计算平均值,最后将结果返回给用户。

`findMaxAndMin`: 这个函数通常用于查找学生中最高和最低成绩的学生。它会遍历所有学生的成绩信息,找出最高和最低的成绩,并返回对应学生的信息。

#### `showMenu()`

private static void showMenu() {

    System.out.println("\n学生成绩管理系统");

    System.out.println("1. 添加学生成绩");

    System.out.println("2. 显示所有学生成绩");

    System.out.println("3. 计算平均成绩");

    System.out.println("4. 查找最高分和最低分");

    System.out.println("5. 退出系统");

    System.out.print("请选择操作:");

}

显示系统操作菜单。

#### `addStudent()`

private static void addStudent() {

    System.out.print("请输入学生姓名:");

    String name = scanner.nextLine();

    System.out.print("请输入学生成绩:");

    double score = scanner.nextDouble();

    scanner.nextLine(); // Consume newline

    students.add(new Student(name, score));

    System.out.println("学生成绩已添加。");

}

读取用户输入的学生姓名和成绩,并将其添加到`students`列表中。

#### `displayStudents()`

private static void displayStudents() {

    System.out.println("\n所有学生成绩:");

    for (Student student : students) {

        System.out.println("姓名:" + student.name + ", 成绩:" + student.score);

    }

}

 显示所有学生的姓名和成绩。

#### `calculateAverage()`

private static void calculateAverage() {

    if (students.isEmpty()) {

        System.out.println("没有学生信息。");

        return;

    }

    double sum = 0;

    for (Student student : students) {

        sum += student.score;

    }

    double average = sum / students.size();

    System.out.println("平均成绩:" + average);

}

计算并显示所有学生的平均成绩。

#### `findMaxAndMin()`

private static void findMaxAndMin() {

    if (students.isEmpty()) {

        System.out.println("没有学生信息。");

        return;

    }

    Student maxStudent = students.get(0);

    Student minStudent = students.get(0);

    for (Student student : students) {

        if (student.score > maxStudent.score) {

            maxStudent = student;

        }

        if (student.score < minStudent.score) {

            minStudent = student;

        }

    }

//查找并显示最高分和最低分的学生及其对应的成绩,如下

    System.out.println("最高分:" + maxStudent.name + ", 成绩:" + maxStudent.score);

    System.out.println("最低分:" + minStudent.name + ", 成绩:" + minStudent.score);

}

### 总结

这个程序通过使用`ArrayList`和`Scanner`类,实现了一个简单的学生成绩管理系统。通过主方法中的`while`循环和`switch`语句,用户可以选择执行不同的操作,如添加学生成绩、显示所有学生成绩、计算平均成绩、查找最高分和最低分以及退出系统。每个功能都被封装在独立的方法中,使得代码结构清晰且易于维护。

  #

问题3  Java中,case调用方法后,它的返回值怎么返回到switch括号后的值

  #

在switch语句中,可以使用return语句将方法调用的返回值返回到括号后。以下是一个示例:

public class SwitchExample {

    public static void main(String[] args) {

        int result = switchMethod(1);

        System.out.println("返回值: " + result);

    }

    public static int switchMethod(int value) {

        switch (value) {

            case 1:

                return 10;

            case 2:

                return 20;

            default:

                return 30;

        }

    }

}

在这个示例中,`switchMethod`方法根据传入的参数`value`返回不同的值。在main方法中,我们将`switchMethod`的返回值赋值给变量`result`,然后输出结果。

 问题4  Java中,case后的语句执行完后,怎么让它不结束程序并且可以重新选择执行别的

某某: 

还有就是case后的语句执行完后,怎么让它不结束程序并且可以重新选择执行别的case

A.:

为了在`switch`语句中执行完一个`case`后不结束程序,并且可以重新选择执行其他`case`,你可以将`switch`语句放在一个循环中。这样,每次执行完一个`case`后,程序会继续循环,直到用户选择退出。以下是一个示例:

import java.util.Scanner;

public class SwitchExample {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        boolean exit = false;

        while (!exit) {

            System.out.println("请选择一个选项:");

            System.out.println("1. 选项一");

            System.out.println("2. 选项二");

            System.out.println("3. 退出");

            int choice = scanner.nextInt();

            switch (choice) {

                case 1:

                    System.out.println("你选择了选项一");

                    break;

                case 2:

                    System.out.println("你选择了选项二");

                    break;

                case 3:

                    System.out.println("退出程序");

                    exit = true;

                    break;

                default:

                    System.out.println("无效的选项,请重新选择");

                    break;

            }

        }

        scanner.close();

    }

}

在这个示例中,`while`循环会一直运行,直到用户选择退出(输入选项3)。每次循环中,程序会提示用户选择一个选项,并根据用户的输入执行相应的`case`。如果用户选择了无效的选项,程序会提示重新选择。

#

问题5就是怎么将一个待输入的数传入一个数组

要将一个待输入的数传入数组,可以使用以下方法:

1. 创建一个数组,将待输入的数作为数组的元素。

2. 使用循环或迭代器将待输入的数逐个添加到数组中。

5.1使用Python将一个待输入的数传入数组:

# 创建一个空数组

arr = []

# 输入待添加的数

num = int(input("请输入一个整数:"))

# 将待输入的数添加到数组中

arr.append(num)

# 输出数组

print("数组为:", arr)

5.1Java将一个待输入的数传入数组:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        // 创建一个空数组

        int[] arr = new int[10];

        // 输入待添加的数

        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入一个整数:");

        int num = scanner.nextInt();

        // 将待输入的数添加到数组中

        arr[0] = num;

        // 输出数组

        System.out.print("数组为:");

        for (int i = 0; i < arr.length; i++) {

            System.out.print(arr[i] + " ");

        }

    }

}

问题6 :

6.1

要实现只存入一个学生的名字并在之后存入其他学生名字,你可以考虑在程序中增加一个条件来判断是否已经存入了学生名字。你可以在添加学生姓名前先检查数组是否已经存在学生名字,如果不存在则添加,否则不添加。这样可以确保每次只存入一个学生的名字。

下面是一个示例代码修改的想法:

import java.util.ArrayList;
import java.util.Scanner;

class Student {
    String name;
    double score;

    Student(String name, double score) {
        this.name = name;
        this.score = score;
    }
}

public class StudentManagementSystem {
    private static ArrayList<Student> students = new ArrayList<>();
    private static Scanner scanner = new Scanner(System.in);
    private static boolean nameAdded = false; // 添加一个标记来表示是否已添加过名字

    public static void main(String[] args) {
        while (true) {
            showMenu();
            int choice = scanner.nextInt();
            scanner.nextLine(); // Consume newline

            switch (choice) {
                case 1:
                    if (!nameAdded) {
                        addStudent();
                        nameAdded = true; // 设置为true表示已经添加了名字
                    } else {
                        System.out.println("已经添加过学生姓名。");
                    }
                    break;
                case 2:
                    displayStudents();
                    break;
                case 3:
                    calculateAverage();
                    break;
                case 4:
                    findMaxAndMin();
                    break;
                case 5:
                    System.out.println("退出系统。");
                    scanner.close();
                    return;
                default:
                    System.out.println("无效输入,请重新选择。");
            }
        }
    }

    // 其他方法保持不变

    private static void addStudent() {
        System.out.print("请输入学生姓名:");
        String name = scanner.nextLine();
        System.out.print("请输入学生成绩:");
        double score = scanner.nextDouble();
        scanner.nextLine(); // Consume newline
        students.add(new Student(name, score));
        System.out.println("学生成绩已添加。");
    }
}

这样,只有在第一次选择添加学生时才会存入学生姓名,之后再选择添加学生时会提示已经添加过学生姓名,

6.2 模板  :控制是否执行存入数组的操作

在Java中,你可以使用一个布尔变量来控制是否执行存入数组的操作。下面是一个使用Java语言的示例代码,演示如何在循环中只存入一次学生的名字:

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> studentNames = new ArrayList<>(); // 使用ArrayList来存储名字
        boolean hasStoredName = false; // 控制标志变量

        // 假设有一个循环,这里用for循环作为例子
        for (int i = 0; i < someNumberOfLoops; i++) {
            if (!hasStoredName) {
                // 存入学生的名字,这里假设名字是"StudentName"
                studentNames.add("StudentName");
                hasStoredName = true; // 更新标志变量
            }
            
            // 其他循环需要执行的代码...
        }

        // 循环结束后,studentNames列表中将只包含一个学生的名字
        System.out.println(studentNames); // 打印学生名字列表
    }
}

在这个例子中,`hasStoredName`变量用来跟踪是否已经将名字存入`studentNames`列表。在第一次循环时,`hasStoredName`为`false`,因此会执行存入名字的操作,并将`hasStoredName`设置为`true`。在随后的循环中,由于`hasStoredName`已经是`true`,所以不会再执行存入名字的操作。

注意:  这里使用了`ArrayList`来存储名字,因为Java数组的大小是固定的,而`ArrayList`提供了动态数组的功能,可以更方便地在运行时添加元素。如果你确实需要使用数组而不是`ArrayList`,你需要预先知道将要存储的名字数量,以便初始化数组的大小。如果使用数组,一旦数组满了,就不能再添加更多的元素了

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3分云计算

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值