编写一个泛型类,适合于基本数据类型byte、short、int、long、float、double数组的排序与求和
这个一部分题目,这个部分我用的重载,因为使用泛型死活不成功。
package experiment6;
import java.io.*;
import java.util.*;
public class Types<T> {
T[] sorts(T[] temp) {
Arrays.sort(temp);
return temp;
}
String plus(String[] temp) {
String result = new String();
for (int i = 0; i < temp.length; i++) {
result += temp[i];
}
return result;
}
double plus(double[] temp) {
double result = 0;
for (int i = 0; i < temp.length; i++) {
result += temp[i];
}
return result;
}
Integer plus(Integer[] temp) {
Integer result = 0;
for (int i = 0; i < temp.length; i++) {
result += temp[i];
}
return result;
}
short plus(short[] temp) {
short result = 0;
for (int i = 0; i < temp.length; i++) {
result += temp[i];
}
return result;
}
byte plus(byte[] temp) {
byte result = 0;
for (int i = 0; i < temp.length; i++) {
result += temp[i];
}
return result;
}
float plus(float[] temp) {
float result = 0;
for (int i = 0; i < temp.length; i++) {
result += temp[i];
}
return result;
}
long plus(long[] temp) {
long result = 0;
for (int i = 0; i < temp.length; i++) {
result += temp[i];
}
return result;
}
List<T> extract(T[] temp,int n) {
Random rand = new Random();
boolean[] bool = new boolean[temp.length];
int t;
List<T> lists = new ArrayList<T>();
for (int i = 0; i < n; i++) {
do
t = rand.nextInt(temp.length);
while (bool[t]);
lists.add(temp[t]);
bool[t] = true;
}
 return lists;
}
}
class UseTypes {
Scanner scanner = new Scanner(System.in);
int temp;
void score() {
System.out.println("请输入一组学生成绩,求平均数。");
System.out.print("请输入学生个数:");
temp = scanner.nextInt();
double[] score = new double[temp];
for (int i = 0; i < temp; i++) {
System.out.print("请输入成绩:");
score[i] = scanner.nextDouble();
}
Types<Double> types = new Types<Double>();
System.out.printf("学生平均成绩为: %.1f\n",types.plus(score)/temp);
}
void draw() {
System.out.println("请输入一组学生学号进行抽奖。");
System.out.println("请输入要抽取的学生个数:");
temp = scanner.nextInt();
System.out.println("请输入要中奖学生个数:");
int n = scanner.nextInt();
String[] id = new String[temp];
for (int i = 0; i < id.length; i++) {
id[i] = scanner.next();
}
Types<String> types = new Types<String>();
System.out.println(types.extract(id, n));
}
void readinfile() {
System.out.println("请输入文件名:");
String filename = scanner.next();
String[] f = new String[4];
Scanner cin;
try {
cin = new Scanner(new FileReader(filename));
System.out.println("这是文件中的东西。");
for (int i = 0; cin.hasNext(); i++) {
String s = cin.next();
System.out.println(s);
f[i] = s;
Types<String> types = new Types<String>();
System.out.println("和为:");
System.out.println(types.plus(f));
System.out.println("排序后:");
System.out.println(Arrays.toString(types.sorts(f)));
}
} catch (Exception e){
System.out.println("catch Exception");
System.out.println("getMessage():" + e.getMessage());
}
}
void readnumber() {
System.out.println("请输入文件名:");
String filename = scanner.next();
Integer[] f = new Integer[4];
Scanner sc;
try {
sc = new Scanner(new FileReader(filename));
System.out.println("这是文件中的东西。");
for (int i = 0; sc.hasNext(); i++) {
Integer t = sc.nextInt();
System.out.println(t);
f[i] = t;
Types<Integer> types = new Types<Integer>();
System.out.println("和为:");
System.out.println(types.plus(f));
System.out.println("排序后:");
System.out.println(Arrays.toString(types.sorts(f)));
}
} catch (Exception e){
System.out.println("catch Exception");
System.out.println("getMessage():" + e.getMessage());
}
}
public static void main(String[] args) {
UseTypes use = new UseTypes();
use.score();
use.draw();
use.readinfile();
use.readnumber();
}
}

解决方案 »

  1.   

    package experiment6;
    import java.io.*;
    import java.util.*;
    public class Types<T> {
    T[] sorts(T[] temp) {
    Arrays.sort(temp);
    return temp;
    }
    String plus(String[] temp) {
    String result = new String();
    for (int i = 0; i < temp.length; i++) {
    result += temp[i];
    }
    return result;
    }
    double plus(double[] temp) {
    double result = 0;
    for (int i = 0; i < temp.length; i++) {
    result += temp[i];
    }
    return result;
    }
    Integer plus(Integer[] temp) {
    Integer result = 0;
    for (int i = 0; i < temp.length; i++) {
    result += temp[i];
    }
    return result;
    }
    short plus(short[] temp) {
    short result = 0;
    for (int i = 0; i < temp.length; i++) {
    result += temp[i];
    }
    return result;
    }
    byte plus(byte[] temp) {
    byte result = 0;
    for (int i = 0; i < temp.length; i++) {
    result += temp[i];
    }
    return result;
    }
    float plus(float[] temp) {
    float result = 0;
    for (int i = 0; i < temp.length; i++) {
    result += temp[i];
    }
    return result;
    }
    long plus(long[] temp) {
    long result = 0;
    for (int i = 0; i < temp.length; i++) {
    result += temp[i];
    }
    return result;
    }
    List<T> extract(T[] temp,int n) {
    Random rand = new Random();
    boolean[] bool = new boolean[temp.length];
    int t;
    List<T> lists = new ArrayList<T>();
    for (int i = 0; i < n; i++) {
    do
    t = rand.nextInt(temp.length);
    while (bool[t]);
    lists.add(temp[t]);
    bool[t] = true;
    }
     return lists;
    }
    }
    class UseTypes {
    Scanner scanner = new Scanner(System.in);
    int temp;
    void score() {
    System.out.println("请输入一组学生成绩,求平均数。");
    System.out.print("请输入学生个数:");
    temp = scanner.nextInt();
    double[] score = new double[temp];
    for (int i = 0; i < temp; i++) {
    System.out.print("请输入成绩:");
    score[i] = scanner.nextDouble();
    }
    Types<Double> types = new Types<Double>();
    System.out.printf("学生平均成绩为: %.1f\n",types.plus(score)/temp);
    }
    void draw() {
    System.out.println("请输入一组学生学号进行抽奖。");
    System.out.println("请输入要抽取的学生个数:");
    temp = scanner.nextInt();
    System.out.println("请输入要中奖学生个数:");
    int n = scanner.nextInt();
    String[] id = new String[temp];
    for (int i = 0; i < id.length; i++) {
    id[i] = scanner.next();
    }
    Types<String> types = new Types<String>();
    System.out.println(types.extract(id, n));
    }
    void readinfile() {
    System.out.println("请输入文件名:");
    String filename = scanner.next();
    String[] f = new String[4];
    Scanner cin;
    try {
    cin = new Scanner(new FileReader(filename));
    System.out.println("这是文件中的东西。");
    for (int i = 0; cin.hasNext(); i++) {
    String s = cin.next();
    System.out.println(s);
    f[i] = s;
    Types<String> types = new Types<String>();
    System.out.println("和为:");
    System.out.println(types.plus(f));
    System.out.println("排序后:");
    System.out.println(Arrays.toString(types.sorts(f)));
    }
    } catch (Exception e){
    System.out.println("catch Exception");
    System.out.println("getMessage():" + e.getMessage());
    }
    }
    void readnumber() {
    System.out.println("请输入文件名:");
    String filename = scanner.next();
    Integer[] f = new Integer[4];
    Scanner sc;
    try {
    sc = new Scanner(new FileReader(filename));
    System.out.println("这是文件中的东西。");
    for (int i = 0; sc.hasNext(); i++) {
    Integer t = sc.nextInt();
    System.out.println(t);
    f[i] = t;
    Types<Integer> types = new Types<Integer>();
    System.out.println("和为:");
    System.out.println(types.plus(f));
    System.out.println("排序后:");
    System.out.println(Arrays.toString(types.sorts(f)));
    }
    } catch (Exception e){
    System.out.println("catch Exception");
    System.out.println("getMessage():" + e.getMessage());
    }
    }
    public static void main(String[] args) {
    UseTypes use = new UseTypes();
    use.score();
    use.draw();
    use.readinfile();
    use.readnumber();
    }
    }
      

  2.   

    你的代码正确,只要把main()方法放到public class Types<T>中就行了,
    可以这样改代码
    import java.io.*;
    import java.util.*;
    public class Types<T>
     {
    public static void main(String[] args)  //主方法
    {
    UseTypes use = new UseTypes();
    use.score();
    use.draw();
    use.readinfile();
    use.readnumber();
    }
    T[] sorts(T[] temp) 
    {
    Arrays.sort(temp);
    return temp;
    }
    String plus(String[] temp)
    {
    String result = new String();
    for (int i = 0; i < temp.length; i++) 
    {
    result += temp[i];
    }
    return result;
    }
    double plus(double[] temp) 
    {
    double result = 0;
    for (int i = 0; i < temp.length; i++)
    {
    result += temp[i];
    }
    return result;
    }
    Integer plus(Integer[] temp)
    {
    Integer result = 0;
    for (int i = 0; i < temp.length; i++)
    {
    result += temp[i];
    }
    return result;
    }
    short plus(short[] temp)
    {
    short result = 0;
    for (int i = 0; i < temp.length; i++) 
    {
    result += temp[i];
    }
    return result;
    }
    byte plus(byte[] temp) 
    {
    byte result = 0;
    for (int i = 0; i < temp.length; i++) 
    {
    result += temp[i];
    }
    return result;
    }
    float plus(float[] temp) 
    {
    float result = 0;
    for (int i = 0; i < temp.length; i++) 
    {
    result += temp[i];
    }
    return result;
    }
    long plus(long[] temp) 
    {
    long result = 0;
    for (int i = 0; i < temp.length; i++) 
    {
    result += temp[i];
    }
    return result;
    }
    List<T> extract(T[] temp,int n) 
    {
    Random rand = new Random();
    boolean[] bool = new boolean[temp.length];
    int t;
    List<T> lists = new ArrayList<T>();
    for (int i = 0; i < n; i++) 
    {
    do
    t = rand.nextInt(temp.length);
    while (bool[t]);
    lists.add(temp[t]);
    bool[t] = true;
    }
     return lists;
    }
    }
    class UseTypes {
    Scanner scanner = new Scanner(System.in);
    int temp;
    void score() {
    System.out.println("请输入一组学生成绩,求平均数。");
    System.out.print("请输入学生个数:");
    temp = scanner.nextInt();
    double[] score = new double[temp];
    for (int i = 0; i < temp; i++) {
    System.out.print("请输入成绩:");
    score[i] = scanner.nextDouble();
    }
    Types<Double> types = new Types<Double>();
    System.out.printf("学生平均成绩为: %.1f\n",types.plus(score)/temp);
    }
    void draw() {
    System.out.println("请输入一组学生学号进行抽奖。");
    System.out.println("请输入要抽取的学生个数:");
    temp = scanner.nextInt();
    System.out.println("请输入要中奖学生个数:");
    int n = scanner.nextInt();
    String[] id = new String[temp];
    for (int i = 0; i < id.length; i++) {
    id[i] = scanner.next();
    }
    Types<String> types = new Types<String>();
    System.out.println(types.extract(id, n));
    }
    void readinfile() {
    System.out.println("请输入文件名:");
    String filename = scanner.next();
    String[] f = new String[4];
    Scanner cin;
    try {
    cin = new Scanner(new FileReader(filename));
    System.out.println("这是文件中的东西。");
    for (int i = 0; cin.hasNext(); i++) {
    String s = cin.next();
    System.out.println(s);
    f[i] = s;
    Types<String> types = new Types<String>();
    System.out.println("和为:");
    System.out.println(types.plus(f));
    System.out.println("排序后:");
    System.out.println(Arrays.toString(types.sorts(f)));
    }
    } catch (Exception e){
    System.out.println("catch Exception");
    System.out.println("getMessage():" + e.getMessage());
    }
    }
    void readnumber() {
    System.out.println("请输入文件名:");
    String filename = scanner.next();
    Integer[] f = new Integer[4];
    Scanner sc;
    try {
    sc = new Scanner(new FileReader(filename));
    System.out.println("这是文件中的东西。");
    for (int i = 0; sc.hasNext(); i++) {
    Integer t = sc.nextInt();
    System.out.println(t);
    f[i] = t;
    Types<Integer> types = new Types<Integer>();
    System.out.println("和为:");
    System.out.println(types.plus(f));
    System.out.println("排序后:");
    System.out.println(Arrays.toString(types.sorts(f)));
    }
    } catch (Exception e){
    System.out.println("catch Exception");
    System.out.println("getMessage():" + e.getMessage());
    }
    }}