WarSir 发表于 2021-10-8 18:01:34

java未交作业查看设计

想做一个反馈还有谁没交作业的设计,但是技术上暂时无法实现,麻烦各位帮忙看看

WarSir 发表于 2021-10-8 18:05:54

目前的想法是,设置49个元素的int数组,然后用new Scanner(System.in).nextInt输入数字(学号),然后通过"=="判断当前输入的是否为"00"来终止输入,将其余未输入的元素默认输入为0,之后遍历出来(还没有做冒泡排序,到时由低到高遍历出来),方便我知道还有哪些学生还没交。

WarSir 发表于 2021-10-8 18:07:27

但是空有想法没有技术,求各位帮忙看看,如何解决,辛苦各位了

巴巴鲁 发表于 2021-10-8 21:36:39

WarSir 发表于 2021-10-8 18:05
目前的想法是,设置49个元素的int数组,然后用new Scanner(System.in).nextInt输入数字(学号),然后通过" ...

想法很有意思,你的意思是没有输入学号的代表没有教作业吗?
可以说的详细一些吗

WarSir 发表于 2021-10-9 10:26:44

巴巴鲁 发表于 2021-10-8 21:36
想法很有意思,你的意思是没有输入学号的代表没有教作业吗?
可以说的详细一些吗

对的,整体思路是:遍历赋值1-49到int[] student中,然后通过nextInt方法输入已交同学的学号(即1-49)进入数组中(因为没有同学们没有交齐,所以需要设置当输入“00”时会停止,不再输入进数组),然后if判断数组中没有被赋值1-49的值,将那些值统一赋值0,然后将数组通过冒泡排序进行遍历输出。

巴巴鲁 发表于 2021-10-9 15:44:06

WarSir 发表于 2021-10-9 10:26
对的,整体思路是:遍历赋值1-49到int[] student中,然后通过nextInt方法输入已交同学的学号(即1-49)进 ...

不需要啊,java新建数组时,如果没有赋值,里面的值就是0

巴巴鲁 发表于 2021-10-9 15:45:29

WarSir 发表于 2021-10-9 10:26
对的,整体思路是:遍历赋值1-49到int[] student中,然后通过nextInt方法输入已交同学的学号(即1-49)进 ...

而且可以遍历判定值在1~49的,如果在,就说明交作业了

WarSir 发表于 2021-10-9 16:41:34

巴巴鲁 发表于 2021-10-9 15:44
不需要啊,java新建数组时,如果没有赋值,里面的值就是0

哦哦,对的对的

WarSir 发表于 2021-10-9 16:42:13

巴巴鲁 发表于 2021-10-9 15:45
而且可以遍历判定值在1~49的,如果在,就说明交作业了

现在在尝试直接用for循环来判断和替换

WarSir 发表于 2021-10-9 19:31:57

import java.util.Scanner;

public class demo7 {
    public static void main(String[] args){
      int[] arr = new int;

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

      System.out.println("请输入已交作业的同学:");
      for(int i = 0; i < arr.length; i++){
            int temp = new Scanner(System.in).nextInt();
            for(int j = 0; j < arr.length; j++){
                if(temp == arr){
                  arr = 0;
                }
            }
      }

      int temp = 0;
      for(int i = 0; i < arr.length - 1; i++){
            for(int j = 0; j < arr.length -1; j++){
                if(arr > arr){
                  temp = arr;
                  arr = arr;
                  arr = temp;
                }
            }
      }

      System.out.println("未提交的同学有:");
      for(int i = 0; i < arr.length; i++){
            System.out.print(arr + " ");
      }
    }
}

WarSir 发表于 2021-10-9 19:33:04

现在这个就很神奇,能替换一部分,但不完全替换,而且冒泡排序只能排序第一个,其他的不动……

巴巴鲁 发表于 2021-10-10 13:42:39

冒泡排序写错了
import java.util.Arrays;
import java.util.Scanner;

public class Test {
    public static void main(String[] args){
      int[] arr = new int;

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

      System.out.println("请输入已交作业的同学:");
      while(true)
      {
            int temp = new Scanner(System.in).nextInt();
            if(temp == 0)
            {
                break;
            }
            arr = 0;
      }


      for(int i = 0; i < arr.length - 1; i++){
            for(int j = 0; j < arr.length -1; j++){
                if(arr > arr){
                  int temp = arr;
                  arr = arr;
                  arr = temp;
                }
            }
      }

      System.out.println("当前数组内容:");
      System.out.println(Arrays.toString(arr));

      System.out.println("未提交的同学有:");
      for(int i = 0; i < arr.length; i++){
            if(arr != 0)
            {
                System.out.print(arr + " ");
            }
      }
    }
}

冰点z 发表于 2021-10-11 15:01:20

看到了你这个题目,奇思妙想是学习的动力源泉,很棒,我来说书我的看法。
1.根据你的想法有两个关键数据维度 学号 和 是否交作业,所以数据结构适合使用 key/value 形式,不适合使用数组
2.既然定位为一个管理系统,可以扩展一下让它有基础管理的功能

花点时间实现了一个供你参考参考,还可以扩展下功能,你可以尝试下:
1.动态录入学号
2.录入错误的数据还原状态
3.记录数据到硬盘(避免每次重启应用信息就丢了,可以把数据写入到一个文本文件里,每次程序启动读取文件并还原)

public class Demo7 {

    private static final Map<String, Boolean> DATA_MAP = new LinkedHashMap<>();
    private static final Scanner SCANNER = new Scanner(System.in);
    private static final String END_FLAG = "exit";


    public static void main(String[] args) {
      //初始化数据
      init();

      //执行功能
      while (true) {
            //打印菜单
            System.out.println("功能列表:");
            System.out.println("1.初始化数据");
            System.out.println("2.录入已交作业学生");
            System.out.println("3.打印未交作业学生");
            System.out.println("4.退出");
            System.out.print("请选择功能:");
            String next = SCANNER.next();
            //检查输入
            if (!next.matches("\\d")) {
                System.out.println("输入有误,请输入正确的选择~");
                continue;
            }
            //选择功能
            int nextInput = Integer.parseInt(next);
            switch (nextInput) {
                case 1:
                  init();
                  break;
                case 2:
                  inputData();
                  break;
                case 3:
                  printData();
                  break;
                case 4:
                  SCANNER.close();
                  System.exit(0);
                default:
                  System.out.println("功能暂未开发哦,请输入正确的选择~");
            }
      }


    }

    /**
   * 初始化数据
   */
    public static void init() {
      //清空已有数据
      DATA_MAP.clear();
      //初始化学号,根据需要修改,
      //TODO 此处也可以改成输入学号的形式
      for (int i = 1; i < 50; i++) {
            DATA_MAP.put(i + "", false);
      }
    }

    /**
   * 录入数据
   */
    public static void inputData() {

      while (true) {
            System.out.print("请输入:");
            String next = SCANNER.next();
            //exit退出
            if (END_FLAG.equals(next)) {
                break;
            }

            Boolean flag = DATA_MAP.get(next);
            //学号不存在
            if (flag == null) {
                System.out.println("学号 " + next + " 未找到!");
                continue;
            }
            //学号已标记,提示
            if (flag == true) {
                System.out.println("学号 " + next + " 已标记过交了作业哦");
                continue;
            }
            //学号未标记,修改状态
            DATA_MAP.put(next, true);
            System.out.println("学号 " + next + " 成功标记为已交作业");
      }
    }

    /**
   * 打印数据
   */
    public static void printData() {
      if (DATA_MAP.isEmpty()) {
            System.out.println("数据为空!");
      }
      System.out.println("未交作业的学生列表:");
      //循环打印未交作业的学号
      int i = 1;
      for (String sno : DATA_MAP.keySet()) {
            if (!DATA_MAP.get(sno)) {
                System.out.print(sno + "\t");
            }
            //每行显示10个学号 超过换行
            if (i % 10 == 0) {
                System.out.println();
            }
            i++;
      }
      //最后换行
      System.out.println();
    }
}

运行结果如下:

功能列表:
1.初始化数据
2.录入已交作业学生
3.打印未交作业学生
4.退出
请选择功能:3
未交作业的学生列表:
1        2        3        4        5        6        7        8        9        10       
11        12        13        14        15        16        17        18        19        20       
21        22        23        24        25        26        27        28        29        30       
31        32        33        34        35        36        37        38        39        40       
41        42        43        44        45        46        47        48        49       
功能列表:
1.初始化数据
2.录入已交作业学生
3.打印未交作业学生
4.退出
请选择功能:2
请输入:1
学号 1 成功标记为已交作业
请输入:2
学号 2 成功标记为已交作业
请输入:1
学号 1 已标记过交了作业哦
请输入:exit
功能列表:
1.初始化数据
2.录入已交作业学生
3.打印未交作业学生
4.退出
请选择功能:3
未交作业的学生列表:
3        4        5        6        7        8        9        10       
11        12        13        14        15        16        17        18        19        20       
21        22        23        24        25        26        27        28        29        30       
31        32        33        34        35        36        37        38        39        40       
41        42        43        44        45        46        47        48        49       
功能列表:
1.初始化数据
2.录入已交作业学生
3.打印未交作业学生
4.退出
请选择功能:aaa
输入有误,请输入正确的选择~
功能列表:
1.初始化数据
2.录入已交作业学生
3.打印未交作业学生
4.退出
请选择功能:4

Process finished with exit code 0
页: [1]
查看完整版本: java未交作业查看设计