Java,需要帮助从数组中打印字符串
Java, need help printing a string out of an array
当我尝试在第一个开关中打印出“'Prim object'”作为案例 1 时,我收到如下所示的打印错误:
Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.String
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.util.Formatter.format(Formatter.java:2455)
at java.lang.String.format(String.java:2927)
at dn09$Tip.toString(dn09.java:82)
at java.lang.String.valueOf(String.java:2981)
at java.io.PrintStream.println(PrintStream.java:821)
at dn09.izpisi(dn09.java:32)
at dn09.main(dn09.java:19)
我他妈的弄不明白哪里出了问题,我想做的是将 tipi 数组的第 i 个槽中的 Tip 作为字符串打印出来。我阅读和创建“'Prim'”的方式可能是错误的吗?还是用于打印错误的任何方法?如果我使用 class 中的 toString 方法,它不会打印 提示要么
这是我现在拥有的整个程序:
import java.util.*;
public class dn09 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int B = sc.nextInt();
Tip[] tipi = preberi(sc);
int u = sc.nextInt();
int[] ukazia = new int[u];
int[] ukazid = new int[u];
for (int i = 0; i < u; i++) {
ukazia[i] = sc.nextInt();
ukazid[i] = sc.nextInt();
}
for (int i = 0; i < u; i++) {
switch(ukazia[i]) {
case 1:
int vrstica = ukazid[i];
izpisi(vrstica-1, tipi);
case 2:
case 3:
}
}
}
private static void izpisi(int i, Tip[] tipi) {
System.out.println(tipi[i]);
}
private static Tip[] preberi(Scanner sc) {
int d = sc.nextInt();
Tip[] tipi = new Tip[d];
for (int i = 0; i < d; i++) {
String tipPodatka = sc.next();
switch (tipPodatka) {
case "prim":
tipi[i] = new Prim(sc.nextInt());
break;
case "arr":
break;
case "ostruct":
break;
case "pstruct":
break;
}
}
return tipi;
}
private static class Prim extends Tip {
protected int v;
public Prim (int v) {
this.v = v;
}
public String vrsta() {
return "prim";
}
public String podatki() {
return String.format("v = %d", this.v);
}
}
private static abstract class Tip extends dn09 {
public abstract String podatki();
public abstract String vrsta();
public String toString() {
return String.format("%s%d", this.vrsta(), this.podatki());
}
}
}
将您的代码更改为:
return String.format("%s%s", this.vrsta(), this.podatki());
(两次%s
,不是%s
然后%d
)
%d
表示要打印一个数字,但是this.podatki()
returns一个String,不兼容%d
.
return String.format("%s%d", this.vrsta(), this.podatki());
如果我没看错的话,podatki
是一个字符串,而不是一个整数。所以你需要稍微改变一下格式:
return String.format("%s%s", this.vrsta(), this.podatki());
^
当使用String.format时,%d
用于整数。要插入字符串,您必须使用 %s
.
private static abstract class Tip
{
public abstract String podatki();
public abstract String vrsta();
public String toString()
{
return String.format("%s%s", this.vrsta(), this.podatki());
}
}
当我尝试在第一个开关中打印出“'Prim object'”作为案例 1 时,我收到如下所示的打印错误:
Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.String
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.util.Formatter.format(Formatter.java:2455)
at java.lang.String.format(String.java:2927)
at dn09$Tip.toString(dn09.java:82)
at java.lang.String.valueOf(String.java:2981)
at java.io.PrintStream.println(PrintStream.java:821)
at dn09.izpisi(dn09.java:32)
at dn09.main(dn09.java:19)
我他妈的弄不明白哪里出了问题,我想做的是将 tipi 数组的第 i 个槽中的 Tip 作为字符串打印出来。我阅读和创建“'Prim'”的方式可能是错误的吗?还是用于打印错误的任何方法?如果我使用 class 中的 toString 方法,它不会打印 提示要么
这是我现在拥有的整个程序:
import java.util.*;
public class dn09 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int B = sc.nextInt();
Tip[] tipi = preberi(sc);
int u = sc.nextInt();
int[] ukazia = new int[u];
int[] ukazid = new int[u];
for (int i = 0; i < u; i++) {
ukazia[i] = sc.nextInt();
ukazid[i] = sc.nextInt();
}
for (int i = 0; i < u; i++) {
switch(ukazia[i]) {
case 1:
int vrstica = ukazid[i];
izpisi(vrstica-1, tipi);
case 2:
case 3:
}
}
}
private static void izpisi(int i, Tip[] tipi) {
System.out.println(tipi[i]);
}
private static Tip[] preberi(Scanner sc) {
int d = sc.nextInt();
Tip[] tipi = new Tip[d];
for (int i = 0; i < d; i++) {
String tipPodatka = sc.next();
switch (tipPodatka) {
case "prim":
tipi[i] = new Prim(sc.nextInt());
break;
case "arr":
break;
case "ostruct":
break;
case "pstruct":
break;
}
}
return tipi;
}
private static class Prim extends Tip {
protected int v;
public Prim (int v) {
this.v = v;
}
public String vrsta() {
return "prim";
}
public String podatki() {
return String.format("v = %d", this.v);
}
}
private static abstract class Tip extends dn09 {
public abstract String podatki();
public abstract String vrsta();
public String toString() {
return String.format("%s%d", this.vrsta(), this.podatki());
}
}
}
将您的代码更改为:
return String.format("%s%s", this.vrsta(), this.podatki());
(两次%s
,不是%s
然后%d
)
%d
表示要打印一个数字,但是this.podatki()
returns一个String,不兼容%d
.
return String.format("%s%d", this.vrsta(), this.podatki());
如果我没看错的话,podatki
是一个字符串,而不是一个整数。所以你需要稍微改变一下格式:
return String.format("%s%s", this.vrsta(), this.podatki());
^
当使用String.format时,%d
用于整数。要插入字符串,您必须使用 %s
.
private static abstract class Tip
{
public abstract String podatki();
public abstract String vrsta();
public String toString()
{
return String.format("%s%s", this.vrsta(), this.podatki());
}
}