**JAVA上机课作业记录——实验一**
**实验一**
一.基本题
能在编译时而不时运行时检测出错误。
泛型类型在运行时会被消除,所以需要受限
不带原始类型参数的泛型类称为原始类型。
因为在进行多态调用的时候,没有进行泛型会出现类型不匹配,会报编译错误
因为使用原始泛型会兼容早期的JAVA版本
?,等价于?extend object
? Extend T
? super T
编译器可以使用泛型类型,但这些信息在运行时不可用
二.编程题,每道题都要求写一个测试用例
(1)
import java.util.Arrays;
public class ArrayGenericStack<E>
{
private int m=10;
private int last=0;
private E[] array;
public ArrayGenericStack()
{
array=(E[])new Object[m];
}
public void push(E o)
{
if (isFull())
{
m*=2;
E[]newArray=(E[])new Object[m];
int length=array.length;
for(int i=0;i<length;i++)
{
newArray[i]=array[i];
}
array=newArray;
}
array[last]=o;
last++;
}
public E pop() {
if(isEmpty())
{
return null;
}
E o=array[last--];
return o;
}
public E peek()
{
return array[last-1];
}
public boolean isEmpty()
{
return last==0;
}
public boolean isFull()
{
return last==m;
}
public String toString()
{
String info="";
for(int i=0;i<last;i++)
{
info+=" "+array[i];
}
return info;
}
}
(2)
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListStack<E> extends ArrayList <E>
{
public ArrayListStack()
{
super();
}
public int getSize()
{
return super.size();
}
public int peek()
{
return super.size();
}
public E pop()
{
E m=super.get(getSize()-1);
super.remove(getSize()-1);
return m;
}
public void push(E m)
{
add(m);
}
public boolean isEmpty()
{
return super.isEmpty();
}
public String toString()
{
return "ArrayListStack:" + super.toString(); }
public static void main(String[]args) {
// TODO Auto-generatedmethod stub
System.out.println("请输入五个字符");
Scanner input = new
Scanner(System.in);
ArrayListStack<String>
stack=new ArrayListStack<>();
String str=" ";
for (int i=0;i<5;i++)
{
str=input.nextLine();
stack.push(str);
}
while (!stack.isEmpty())
{
System.out.println(stack.pop());
}
}
}
(3 )
import java.util.*;
public class 队列去重 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input =new Scanner(System.in);
ArrayList<Integer>list=new ArrayList<>();
int m=0;
boolean in=true ;
System.out.println("输入一个整型列表,输入-1表示结束");
while(in)
{
m=input.nextInt();
if(m==-1)
{
break;
}
list.add(new Integer(m));
}
ArrayList<Integer>list2=removeDulicates(list);
int size=list2.size();
for(int i=0;i<size;i++)
{
System.out.println(list2.get(i)+" ");
}
System.out.println();
}
public static <E> ArrayList<E>removeDulicates(ArrayList<E> list)
{
ArrayList<E>list2 =new ArrayList<>();
int size=list.size();
for(int i=0;i<size;i++)
{
if(list2.indexOf(list.get(i))==-1)
{
list2.add(list.get(i));
}
}
return list2;
}
}
(4)
import java.util.*;
public class FindMax {
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer[][]list=new Integer [10][10];
Scanner input =new Scanner (System.in);
System.out.println("请输入一个10行10列的二维数组");
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
list[i][j]=input.nextInt();
}
}
Integer maxnum =max(list);
System.out.println("二维数组中最大值是"+maxnum);
}
public static<E extends Comparable<E>> E max (E[][] list)
{
int row=list.length;
int column=list[0].length;
E max=list[0][0];
for(int i=0;i<row;i++)
{
for(int j=0;j<column;j++)
{
if(list[i][j].compareTo(max)>0)
{
max=list[j][j];
}
}
}
return max;
}
}
(5)
import java.util.*;
public class UpsetArrayList {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input =new Scanner(System.in);
ArrayList<Integer> list =new ArrayList<>();
System.out.println("输入一列整数,以-1为结尾");
boolean in=true;
while(in)
{
Integer num =input.nextInt();
if (num==-1)
{
break;
}
else
{
list.add(num);
}
}
Upset(list);
int size=list.size();
for(int i=0;i <size;i++)
{
System.out.println(list.get(i)+" ");
}
System.out.println();
}
public static <E> void Upset(ArrayList<E> list)
{
int size=list.size();
for(int i=0; i<size;i++)
{
int index=(int)(Math.random()*size);
E m=list.get(index);
list.set(index, list.get(i));
list.set(i, m);
}
}
}