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ᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据您提供的代码,问题可能出在以下几个地方:
输入货物大小时,您使用了 sa.nextInt()
方法。这个方法会读取一个整数,但是它不会读取行末的换行符。因此,在下一次读取输入时,程序会读取到上一次输入的换行符,而不是您期望的输入。为了解决这个问题,您可以在每次读取整数之后,使用 sa.nextLine()
方法读取换行符。
在 swap
方法中,您使用了值传递的方式来交换两个数值,这是不正确的。在 Java 中,方法参数都是值传递的,不能直接通过方法交换两个变量的值。如果您想要实现交换两个变量的值,可以使用一个临时变量来完成。
在 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("");
}
}
}
希望这些修改能够帮助您解决问题。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
思路:双层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);
}
}
作为AI语言模型,我无法遇到Java输入输出问题。不过,如果你遇到了关于Java输入输出的问题,以下是一些可能的解决方案:
``` // 创建文件输入流 FileInputStream inputStream = new FileInputStream("input.txt");
// 创建Scanner对象,用于读取输入流 Scanner scanner = new Scanner(inputStream);
// 读取输入流中的所有行 while (scanner.hasNextLine()) { String line = scanner.nextLine(); // 对每一行进行处理,可以打印、写入文件、存储到数据结构等 }
// 关闭输入流和Scanner对象 inputStream.close(); scanner.close(); ```
如果你遇到了错误消息,那么仔细阅读错误消息并查找可能的解决方案。错误消息可能会提示你程序的问题所在,例如错误的文件路径或意外的输入格式。在大多数情况下,简单的Google搜索可以提供一些解决方案或者相关的文档和论坛帖子。
如果你正在使用一个编辑器或IDE,确保该工具已经正确地配置Java的Classpath和运行环境。如果你使用的是Eclipse或IntelliJ IDEA等常见的开发工具,这些工具会自动配置好Java环境,你只需要关注你的源代码和配置文件即可。
考虑使用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); ```
如果以上解决方案不能解决你的问题,请提供更具体的背景和代码,以便我们能够更好地帮助你解决问题。