如何使用我的 void display() 在 java 中显示许多输入?



我使用void display((来显示输出。但结果都是最后输入的元素。为什么? 我尝试在inputmany中初始化一个数组并在void display((中显示它,但有些错误。 这是我的代码

package atom;
import java.util.Scanner;
public class Atom {
int number;
String symbol;
String fullname;
float weight;
void inputmany(Atom[] a, int n) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < n; i++) {          
System.out.print("Enter atomic number : ");number = sc.nextInt();
System.out.print("Enter symbol : ");symbol = sc.next();
System.out.print("Enter full name : ");fullname = sc.next();
System.out.print("Enter atomic weight : ");weight = sc.nextFloat();
System.out.print("n");
}
}
void display(Atom[] a, int n) {
for (int i = 0; i < n; i++) {
System.out.println(number + " " + symbol + "  " + fullname + "  " + weight);
}
}
public static void main(String[] args) {
Atom[] arr;
Scanner sc = new Scanner(System.in);
System.out.print("Enter n: ");int n = sc.nextInt();
System.out.println("Atomic Information");
System.out.println("==================");        
arr = new Atom[n];
Atom ob = new Atom();    
ob.inputmany(arr, n);
ob.display(arr, n);
}

}

这是因为您需要明确说明您要打印出哪个Atom编号。在您的 for 循环中,正确的打印是这样的:

System.out.println(a[i].number + " " + a[i].symbol + " " + a[i].fullname + " " + a[i].weight);

但是问题还没有解决。

您的 println 只显示最后一个结果,因为 display(( 方法依赖于Atom类型的实例。如果不实例化Atom对象,则 display(( 方法将不起作用,就像您在此处所做的那样:

Atom

ob = new Atom((;

ob.display(arr, n(;

现在 display(( 方法引用了 ob 对象,当你打印普通numbersymbolfullnameweight时,实际结果将是ob属性值。

现在真正的问题从这里开始:

ob.inputmany(arr, n(;

首先:您已经初始化了一个Atom类型的数组。现在,您必须以与数组几乎相同的方式初始化当前a[i]对象:a[i] = new Atom()在 for 循环的开头。

正如我之前所说,一旦您将值设置为普通number..weight属性,它将值设置为要调用inputmany方法的当前对象。您需要再次指定要设置的对象属性值:

inputmanyfor 循环中,请将number更改为a[i].number,其他的也是如此。

这是我解决您的问题的方法:

public class Atom {
int number;
String symbol;
String fullName;
float weight;
static void createAtoms(Atom[] a) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < a.length; i++) {
a[i] = new Atom();
System.out.print("Enter atomic number : ");
a[i].number = sc.nextInt();
System.out.print("Enter symbol : ");
a[i].symbol = sc.next();
System.out.print("Enter full name : ");
a[i].fullName = sc.next();
System.out.print("Enter atomic weight : ");
a[i].weight = sc.nextFloat();
System.out.print("n");
}
}
static void displayAtoms(Atom[] a) {
for (int i = 0; i < a.length; i++) {
System.out.println(a[i].toString());
}
}
@Override
public String toString() {
return "Atom{" +
"number=" + number +
", symbol='" + symbol + ''' +
", fullName='" + fullName + ''' +
", weight=" + weight +
'}';
}
public static void main(String[] args) {
Atom[] atoms;
Scanner sc = new Scanner(System.in);
System.out.print("Enter n: ");
int atomsNumber = sc.nextInt();
atoms = new Atom[atomsNumber];
createAtoms(atoms);
displayAtoms(atoms);
}
}

请注意static关键字,这意味着不需要Atom对象来调用该方法。您的方法不需要int n参数,因为您有获取数组长度的.length选项。而不是在println中写入所有属性,您可以覆盖toString()方法并在每个Atom的for循环中调用它。

PS:请阅读命名约定。他们对将来非常有帮助:)

在方法inputmany()中,您将用户提供的新值设置为相同的变量,从而有效地覆盖它们。

为什么是"相同的变量"?因为你的 Atom 实例总是相同的。这行在main()->Atom ob = new Atom();.因此,ob指向的实例始终获取值。

如何解决这个问题

使用此更改的类:

public class Atom{
int number;
String symbol;
String fullname;
float weight;
void inputmany( Scanner sc ){
System.out.print( "Enter atomic number : " );
number = sc.nextInt();
System.out.print( "Enter symbol : " );
symbol = sc.next();
System.out.print( "Enter full name : " );
fullname = sc.next();
System.out.print( "Enter atomic weight : " );
weight = sc.nextFloat();
System.out.print( "n" );
}
void display(){
System.out.println( number + " " + symbol + "  " + fullname + "  " + weight );
}
public static void main( String[] args ){
Atom[] arr;
Scanner sc = new Scanner( System.in );
System.out.print( "Enter n: " );
int n = sc.nextInt();
System.out.println( "Atomic Information" );
System.out.println( "==================" );
arr = new Atom[n];
//Scanner sc = new Scanner( System.in );
for (int i = 0; i < n; i++) {
Atom ob = new Atom();
ob.inputmany( sc );
arr[ i ] = ob;
}
for (int i = 0; i < n; i++) {
Atom ob = arr[ i ];
ob.display();
}
}
}

变化:

  1. 在这里,用于收集每个Atom的详细信息的for循环已移至main()。请注意,Scanner实例将传递给inputmany()方法。
  2. 添加了另一个for循环以显示收集的值。

相关内容

  • 没有找到相关文章

最新更新