问题描述
我在这里试图完成的是使用三个单独的类启动一个程序,但我似乎遇到了错误。我对此比较陌生,还没有完全理解 java 语言。所以请对我放轻松一点,并随时就可能有助于磨练我的技能的任何事情给我额外的建议。
package com.weightroom;
public class Baeyul { //박스 생성
String name,gender;
int [] threemax = new int [3];
int weight,total,rank;
}
第二节课
package com.weightroom;
import java.util.Scanner;
public class Record {
int inwon;
Baeyul[] bae;
Scanner sc= new Scanner(system.in);
public void set() {
do {
System.out.print("인원 수? ");
inwon= sc.nextInt();
}while(inwon<1||inwon>5);
bae= new Baeyul[inwon];
}
public void input() {
String[] title = {"벤치?","데드?","스쿼트"};
//반복문
for(int i=0;i<inwon;i++) {
bae[i] = new Baeyul();
System.out.print((i+1)+ "번째 이름? ");
bae[i].name = sc.next();
System.out.print("성별? ");
bae[i].gender = sc.next();
System.out.print("몸무게? ");
bae[i].weight = sc.nextInt();
for(int j=0;j<3;j++) { //벤데스?
System.out.print(title[j]);
bae[i].threemax[j] = sc.nextInt();
bae[i].total+= bae[i].threemax[j];
}
}
}
private void ranking() {
int i,j;
for (i=0;i<inwon;i++) {
bae[i].rank=1;
}
for(i=0;i<inwon-1;i++) {
for(j=1;j<inwon;j++) {
if(bae[i].total>bae[j].total) {
bae[j].rank++;
}else if(bae[i].total<bae[j].total) {
bae[i].rank++;
}
}
}
}
public void print() {
ranking();
for(int i=0;i<inwon;i++) {
System.out.printf("%6s",bae[i].name);
System.out.printf("%4s",bae[i].gender);
System.out.printf("%4d",bae[i].weight);
for(int j=0;j<3;j++) {
System.out.printf("%4d",bae[i].threemax);
}
System.out.printf("%4d",bae[i].total);
System.out.printf("%4d|n",bae[i].rank);
}
}
}
*第三课
package com.weightroom;
public class RecordUse {
public static void main(String[] args) {
Record li= new Record();
li.set();
li.input();
li.print();
}
}
launch
jamesException in thread "main" 1 100java.util.IllegalFormatConversionException: d != [I
at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4302)
at java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2793)
at java.util.Formatter$FormatSpecifier.print(Formatter.java:2747)
at java.util.Formatter.format(Formatter.java:2520)
at java.io.PrintStream.format(PrintStream.java:970)
at java.io.PrintStream.printf(PrintStream.java:871)
at com.weightroom.Record.print(Record.java:83)
at com.weightroom.RecordUse.main(RecordUse.java:11)
解决方法
在print方法中你没有放置threemax数组的索引,所以当你尝试以%4d格式打印数组时,会抛出异常。
将threemax更改为threemax [ j ]。
如下图
使用
for(int j=0;j<3;j++) {
System.out.printf("%4d",bae[i].threemax[j]);
}
代替
for(int j=0;j<3;j++) {
System.out.printf("%4d",bae[i].threemax);
}
在打印方法中。