关于#java输入输出#的问题,如何解决?


package 实验文件;

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

public class BoxMain {

    public static void swap(int a, int b){
        int m;
        m=a;a=b;b=m;
    }
    public static void sort(int[] a, int n)
    {
        int temp;
        for(int i=0;i<n-1;i++)                   //比较n-1次(第一次循环表示趟数)
        {
            for(int j=0;j<n-i-1;j++)              // 最后一次比较a[n-i-1]与a[n-i-2]   (第二次循环表示比较次数 )
            {
                if(a[j]<a[j+1])
                {
                    swap( a[j+1],a[j]);
                }
            }
        }
    }


    public static void main(String[]args){

        Scanner sa=new Scanner(System.in);

        int Boxvolume;
        System.out.println("输入箱子大小");
        Boxvolume= sa.nextInt();    //输入箱子大小
        int goods;
        System.out.println("输入货物多少");
        goods= sa.nextInt();        //输入货物多少

        int []goodvolume=new int[1000];
        int []resivolume=new int[1000];

        System.out.println("输入每一个货物大小,一共需要"+goods+"个");
        for (int i=0;i<goods;i++){
            goodvolume[i]= sa.nextInt();    //输入每一个货物大小
        }

        sort(goodvolume,goods);

        int resivolumle[][]=new int[1000][1000];    //定义每个箱子承装的货物代码
        int box_count=0;            //定义箱子个数
        resivolume[box_count]=Boxvolume;            //定义第一个箱体的剩余体积

        for(int i=0;i<goods;i++){
            int shouru=1;
            for (int j=0;j<=box_count;j++){
                if (goodvolume[i]<=resivolume[j]){
                    resivolume[j]=resivolume[j]-goodvolume[i];
                    shouru=0;
                    int num=0;
                    ArrayList mak=new ArrayList();
                    for (int m=0;m<resivolumle[i].length;m++){
                        if (resivolumle[i][m]!=0){
                            num++;
                        }
                    }

                    resivolumle[i][num]=i+1;

                    break;
                }
            }
            if (shouru==1){
                box_count+=1;
                resivolume[box_count]=Boxvolume-goodvolume[i];
                resivolumle[box_count][0]=i+1;
            }
        }

        int num=box_count+1;
        System.out.println("一共需要"+num+"个箱子");


        for(int i=0;i<=box_count;i++){
            int j=i+1;
            System.out.print("第"+j+"个箱子装有下面货物:");
            int numx=0;
            /*ArrayList mak=new ArrayList();*/
            for (int m=0;m<resivolumle[i].length;m++){
                if (resivolumle[i][m]!=0){
                    numx++;
                }
            }


            for (int m=0;m<=numx;m++){
                System.out.print(resivolumle[i][m]+" ");
            }
            System.out.println("");
        }
    }
}

为什么我的输入输出是这样的,代码哪里有问题

输入箱子大小
100
输入货物多少
6
输入每一个货物大小,一共需要6个
60 45 35 20 20 20
一共需要3个箱子
第1个箱子装有下面货物:1 0
第2个箱子装有下面货物:2 0
第3个箱子装有下面货物:6 0

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据您提供的代码,问题可能出在以下几个地方:

  1. 输入货物大小时,您使用了 sa.nextInt() 方法。这个方法会读取一个整数,但是它不会读取行末的换行符。因此,在下一次读取输入时,程序会读取到上一次输入的换行符,而不是您期望的输入。为了解决这个问题,您可以在每次读取整数之后,使用 sa.nextLine() 方法读取换行符。

  2. swap 方法中,您使用了值传递的方式来交换两个数值,这是不正确的。在 Java 中,方法参数都是值传递的,不能直接通过方法交换两个变量的值。如果您想要实现交换两个变量的值,可以使用一个临时变量来完成。

  3. sort 方法中,您的冒泡排序算法的实现有一些问题。具体来说,您在交换两个数值时,使用了错误的参数。应该使用数组中的下标来交换两个数值,而不是数值本身。另外,您的排序算法是倒序排列的,如果想要正序排列,可以把 if(a[j]<a[j+1]) 改成 if(a[j]>a[j+1])

下面是修改后的代码:

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

public class BoxMain {

    public static void swap(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }

    public static void sort(int[] a, int n) {
        for (int i = 0; i < n - 1; i++) { // 比较n-1次(第一次循环表示趟数)
            for (int j = 0; j < n - i - 1; j++) { // 最后一次比较a[n-i-1]与a[n-i-2]
                                                    // (第二次循环表示比较次数)
                if (a[j] > a[j + 1]) {
                    swap(a, j, j + 1);
                }
            }
        }
    }

    public static void main(String[] args) {

        Scanner sa = new Scanner(System.in);

        int Boxvolume;
        System.out.println("输入箱子大小");
        Boxvolume = sa.nextInt(); // 输入箱子大小
        sa.nextLine(); // 读取换行符

        int goods;
        System.out.println("输入货物多少");
        goods = sa.nextInt(); // 输入货物多少
        sa.nextLine(); // 读取换行符

        int[] goodvolume = new int[1000];
        int[][] resivolumle = new int[1000][1000];
        int[] resivolume = new int[1000];
        int box_count = 0;

        System.out.println("输入每一个货物大小,一共需要" + goods + "个");
        for (int i = 0; i < goods; i++) {
            goodvolume[i] = sa.nextInt(); // 输入每一个货物大小
            sa.nextLine(); // 读取换行符
        }

        sort(goodvolume, goods);

        resivolume[box_count] = Boxvolume;

        for (int i = 0; i < goods; i++) {
            int shouru = 1;
            for (int j = 0; j <= box_count; j++) {
                if (goodvolume[i] <= resivolume[j]) {
                    resivolume[j] = resivolume[j] - goodvolume[i];
                    shouru = 0;
                    int num = 0;
                    for (int m = 0; m < resivolumle[j].length; m++) {
                        if (resivolumle[j][m] != 0) {
                            num++;
                        }
                    }
                    resivolumle[j][num] = i + 1;
                    break;
                }
            }
            if (shouru == 1) {
                box_count += 1;
                resivolume[box_count] = Boxvolume - goodvolume[i];
                resivolumle[box_count][0] = i + 1;
            }
        }

        int num = box_count + 1;
        System.out.println("一共需要" + num +"个箱子");

        for (int i = 0; i <= box_count; i++) {
            int j = i + 1;
            System.out.print("第" + j + "个箱子装有下面货物:");
            int numx = 0;
            for (int m = 0; m < resivolumle[i].length; m++) {
                if (resivolumle[i][m] != 0) {
                    numx++;
                }
            }
            for (int m = 0; m < numx; m++) {
                System.out.print(resivolumle[i][m] + " ");
            }
            System.out.println("");
        }
    }
}

希望这些修改能够帮助您解决问题。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7536761
  • 除此之外, 这篇博客: JAVA经典基础编程练习题——分析总结与思考——基础题(期末考试专用)中的 题目:求一个3*3矩阵对角线元素之和 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 思路:双层for循环键盘录入九个整数,放到二维数组里面。来一个判断每三个数的中间下标相等则记录总和。

    
    public class Practice30 {
        public static void main(String[] args) {
            Scanner s = new Scanner(System.in);
            int [] [] a =  new int[3][3];
            System.out.println("请输入9个整数");
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                    a[i][j] = s.nextInt();
                }
            }
            System.out.println("输入的3*3矩阵是:");
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                    System.out.println(a[i][j] +"  ");
                }
                System.out.println();
            }
            int sum = 0;
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                    if (i==j) {
                        sum+= a[i][j];
                    }
                }
            }
            System.out.println("对角线之和是:"+sum);
        }
    }
    
    
  • 以下回答由chatgpt基于相关博客总结生成:

    作为AI语言模型,我无法遇到Java输入输出问题。不过,如果你遇到了关于Java输入输出的问题,以下是一些可能的解决方案:

    1. 检查你的代码是否正确地使用了输入输出流。确保你的输入输出流被正确地配置和初始化,并且你的程序能够读取和写入正确的文件或控制台输入。这里提供一个读取文件的示例代码:

    ``` // 创建文件输入流 FileInputStream inputStream = new FileInputStream("input.txt");

    // 创建Scanner对象,用于读取输入流 Scanner scanner = new Scanner(inputStream);

    // 读取输入流中的所有行 while (scanner.hasNextLine()) { String line = scanner.nextLine(); // 对每一行进行处理,可以打印、写入文件、存储到数据结构等 }

    // 关闭输入流和Scanner对象 inputStream.close(); scanner.close(); ```

    1. 如果你遇到了错误消息,那么仔细阅读错误消息并查找可能的解决方案。错误消息可能会提示你程序的问题所在,例如错误的文件路径或意外的输入格式。在大多数情况下,简单的Google搜索可以提供一些解决方案或者相关的文档和论坛帖子。

    2. 如果你正在使用一个编辑器或IDE,确保该工具已经正确地配置Java的Classpath和运行环境。如果你使用的是Eclipse或IntelliJ IDEA等常见的开发工具,这些工具会自动配置好Java环境,你只需要关注你的源代码和配置文件即可。

    3. 考虑使用Java的一些常用库或框架,如Apache Commons IO或Spring框架,这些库和框架提供了许多常用的输入输出功能和实用工具,可以大大简化你的开发过程。例如,在使用Apache Commons IO库的情况下,你可以使用以下代码读取文件内容:

    ``` // 导入所需的库 import org.apache.commons.io.FileUtils;

    // 读取文件内容 String content = FileUtils.readFileToString(new File("input.txt"), StandardCharsets.UTF_8); ```

    如果以上解决方案不能解决你的问题,请提供更具体的背景和代码,以便我们能够更好地帮助你解决问题。