目前遇到的一个问题
1、输入n
2、根据n输入n行,每一行的长度会变,但每一行都一定是数字和空格组成的
3、要求用数组b[n][?]装载这些数
解决方案:
1.根据n初始化b
int[][] b=new int[n][];
2.根据空格进行分裂,用新的String数组装载分裂得到的数
String[]c1=c[j].split(" ");
3.对于第j行的b,初始化长度为c1.length,即,b[n][c1.length];
然后再用Integer.parseInt(str)将字符串str转化成数字,如"18"转化为18;
然后用b[j][k]去装载这个数字
扫描二维码关注公众号,回复:
2544947 查看本文章
b[j]=new int [c1.length];
for(String e:c1)b[j][k++]=Integer.parseInt(e);
这里需要注意的是,用in.nextInt()得到的数字,再去用in.nextline()得到每一行,是需要先用in.nextline()吃掉换行符。不过这种吃只用吃一次就好了,这是因为in.nextInt()没有吃好换行符。
最后附上做题时的代码
package bag;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
abstract class Person{
int sum=0;
public Person(){sum=0;}
abstract int average_number();
abstract void print();
}
class Student extends Person{
public Student(int[] num){
for(int i:num)sum+=i;
}
int average_number(){
return sum/3;
}
void print(){
System.out.println("Student "+average_number());
}
}
class Teacher extends Person{
public Teacher(int[] num){
for(int i:num)sum+=i;
}
int average_number(){
return sum/4;
}
void print(){
System.out.println("Teacher "+average_number());
}
}
public class Main {
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
int n=in.nextInt();
String[] c=new String[n];
int i=0;
//nextInt无法忽略换行符,但nextline可以忽略换行符,
// 即一行结束后不会理睬后面的换行符
String unuse=in.nextLine();
while(n-->0){
c[i++]=in.nextLine();
}
//不规则矩阵初始化
int[][] b=new int[i][];
// int[][] b=new int[2][4];
for(int j=0;j<i;j++)
{
int k=0;
String[]c1=c[j].split(" ");
b[j]=new int [c1.length];
for(String e:c1)b[j][k++]=Integer.parseInt(e);
}
for(int m=0;m<b.length;m++)
if(b[m].length==3){
Student a=new Student(b[m]);
a.print();
}
else {
Teacher a=new Teacher(b[m]);
a.print();
}
}
}