Fragen zum ersten Java-Song-Training

Die Aufgabe dieser Ebene besteht darin, ein Programm zur Verwaltung mehrerer Schüler in einer Klasse zu entwerfen (die Namen der Schüler sind eindeutig). Jeder Schüler hat mehrere Kurse belegt und jeder Kurs hat eine Note. Aber die Kurse, die Studierende derselben Klasse belegen, sind nicht genau gleich.

Anforderungen:
Dieses Programm wird über die Map-Schnittstelle des Collection-Frameworks implementiert. Die Studenten werden in Map gespeichert, der Schlüssel ist der Name des Studenten und der Wert ist eine weitere Map, die Kurse speichert; mehrere von jedem Studenten belegte Kurse werden ebenfalls in Map gespeichert, der Schlüssel ist der Name des Kurses und der Wert ist die Note des Kurses Kurs.
Die fertige Arbeit wird in die Klassenklasse eingeordnet. Klassenname: Konstruktor der Klasse public Class(String name), name ist der Klassenname;
public void addCourseGrade(String stuname,String []Coursenames,Integer[] grades) fügt Studenten- und Kursdaten hinzu, stuname Studentname, Coursenames Name mehrerer Kurse, mehrere Noten entsprechend den Noten;
public void addCourseGrade(String stuname,String Coursename,Integer grade) Studenten- und Kursdaten hinzufügen, stuname Studentname, Coursename Kursname, Noten entsprechend der Note; public void delStudent(String stuname) delete Einen Studenten löschen
, stuname Name des Studenten;
public void delStuCourse(String stuname,String Coursename) Einen Kurs eines Studenten löschen, stuname Name des Studenten, Kursname Name des Kurses;
public double getPerAvgStudent(String stuname) gibt den Durchschnitt aller Kurse eines Studenten zurück. Punktestand, stuname Name des Studenten ;
``
public double getClassAvgCourse(String Coursename) Gibt die Durchschnittsnote eines bestimmten Kurses in einer Klasse zurück. Wenn es in der Klasse einen Schüler gibt, der den Kurs nicht belegt hat, wird die Durchschnittsnote für diesen Schüler nicht berechnet und Coursename ist der Kurs Name.

Starten Sie Ihre Mission und wünschen Ihnen viel Erfolg!

package step1;
import java.util.*;
//在此写Class类

public class Class {
    
    
    String classname = null;
    String stuname = null;
    HashMap<String,ArrayList<HashMap<String,Integer>>> nameprojects = new HashMap<>();//姓名、课程

    public Class(String classname){
    
    
        this.classname = classname;
    }

    public void addCourseGrade(String stuname,String Coursename,Integer grade){
    
    
        ArrayList<HashMap<String,Integer>> stuList = nameprojects.get(stuname);
        if(stuList == null) {
    
    
            stuList = new ArrayList<>();
            nameprojects.put(stuname, stuList);
        }
        HashMap<String,Integer> courseGrade = new HashMap<>();
        courseGrade.put(Coursename, grade);
        stuList.add(courseGrade);
    }
    public void addCourseGrade(String stuname,String[] Coursenames,Integer[] grades){
    
    
        for(int i = 0;i < Coursenames.length;i++){
    
    
            ArrayList<HashMap<String,Integer>> stuList = nameprojects.get(stuname);
            if(stuList == null) {
    
    
                stuList = new ArrayList<>();
                nameprojects.put(stuname, stuList);
            }
            HashMap<String,Integer> courseGrade = new HashMap<>();
            courseGrade.put(Coursenames[i], grades[i]);
            stuList.add(courseGrade);
        }
    }

    public void delStudent(String stuname){
    
    
        nameprojects.remove(stuname);
    }

    public void delStuCourse(String stuname,String Coursename) {
    
    
        for (Map.Entry<String, ArrayList<HashMap<String, Integer>>> delet : nameprojects.entrySet()) {
    
    
            if (delet.getKey().equals(stuname)) {
    
    
                for(HashMap<String,Integer> deletCourse : delet.getValue()){
    
    
                    deletCourse.remove(Coursename);
                }
            }
        }
    }

    public double getPerAvgStudent(String stuname){
    
    
        double sum = 0;
        int count = 0;
        for (Map.Entry<String,ArrayList<HashMap<String,Integer>>> find_name : nameprojects.entrySet()) {
    
    
            if(find_name.getKey().equals(stuname)){
    
    
                for(HashMap<String,Integer> SUM : find_name.getValue()){
    
    
                    for(Map.Entry<String,Integer> Sum : SUM.entrySet()){
    
    
                        sum = sum + Sum.getValue();
                        count++;
                    }

                }
            }
        }
        return sum/count;
    }

    public double getClassAvgCourse(String Coursename){
    
    
        double sum = 0;
        int count = 0;
        for (Map.Entry<String,ArrayList<HashMap<String,Integer>>> find_name : nameprojects.entrySet()) {
    
    
            for(HashMap<String,Integer> SUM : find_name.getValue()){
    
    
                for(Map.Entry<String,Integer> Sum : SUM.entrySet()){
    
    
                    if(Sum.getKey().equals(Coursename)){
    
    
                        sum = sum + Sum.getValue();
                        count++;
                    }
                }
            }
        }
        return sum/count;
    }
}


Die Aufgabe dieser Stufe besteht darin, einen englischen Artikel aus der Datei zu lesen und dann die Anzahl der Vorkommen von 26 englischen Buchstaben zu zählen.

Anforderung:
Zählen Sie die Anzahl der Vorkommen jedes Buchstabens in der Reihenfolge von 26 Buchstaben.

Die zum Zählen von Zeiten verwendete FileLetter-Klasse verfügt nur über eine Methode:
public int[] LetterStatistics(String strFilename);
strFilename ist der zu zählende Eingabedateiname;
zurückgegeben wird ein ganzzahliges Array mit einer Größe von 26, und jeder Speicherort speichert The Häufigkeit des Vorkommens von a bis z.

Groß- und Kleinbuchstaben gelten als derselbe Buchstabe.

Starten Sie Ihre Mission und wünschen Ihnen viel Erfolg!

package step1;
import java.io.*;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.io.IOException;
//在此写FileLetter类
public class FileLetter{
    
    
    public int[] LetterStatistics(String strFilename){
    
    
        int []num=new int[26];
        int k=0;
        for(int i=0;i<26;i++) num[i]=0; 
        try{
    
    
         BufferedReader in=new BufferedReader(new FileReader(strFilename));
            while((k=in.read())!=-1){
    
    
                if(k>=65&&k<=90) k=k+32;
                if(k>=97&&k<=122)
            	num[k-97]++;
            }
            in.close();
        }
        catch (ArrayIndexOutOfBoundsException e) {
    
    
           e.printStackTrace();
        }catch (IOException e) {
    
    
			
				e.printStackTrace();
			}
		 
        return num;
    }
}

Aufgabenbeschreibung
Die Aufgabe dieser Ebene: Erstellen Sie eine Schülerklasse „Student“, einschließlich zweier Attribute: Name und Alter. Der Name darf nicht mehr als 10 Zeichen lang sein und das Alter muss vom Typ int sein. Verwenden Sie die zufällige Lese- und Schreibklasse RandomAccessFile, um Schülerinformationen in die Datei zu schreiben und die Schülerinformationen in der Datei zu lesen und zu ändern. (Siehe Lehrbuch P196, Beispiel 6-18).

Anforderungen:
Der Klassenname der Schülerklasse lautet: Student. In dieser Klasse gibt es zwei Attribute und die Zugriffstypen sind öffentlich:
char name[]=new char[10]; //Student name
int age; //Age
public Student(String name, int age) Konstruktor
public void Print(); Um Name und Alter anzuzeigen, müssen Sie auch eine Lese-/Schreibklasse RWClass erstellen, die über ein Attribut filename verfügt, das den Dateinamen zum Lesen und Schreiben öffnet
. public RWClass(String filename) Der Konstruktor dieser Klasse public void saveStudent(Student ss, int pos) speichert die Informationen des Student-Objekts in der Datei, ss sind die gespeicherten Student-Informationen und der Speicherort von pos. public Student readStudent(int pos) liest die Informationen eines Studenten an einer bestimmten Position in der Datei und gibt das Student-Objekt zurück



Starten Sie Ihre Mission und wünschen Ihnen viel Erfolg!

Studentenklasse

package step2;
//在此写Student类
public class Student{
    
    
    public char[] name={
    
    '\u0000','\u0000','\u0000','\u0000','\u0000','\u0000','\u0000','\u0000','\u0000','\u0000'};
    public int age;
    public Student(String name,int age)throws Exception{
    
    
        if(name.toCharArray().length>10){
    
    
            System.arraycopy(name.toCharArray(),0,this.name,0,10);
        }else{
    
    
            System.arraycopy(name.toCharArray(),0,this.name,0,name.toCharArray().length);
        }
        this.age=age;
    }
    public Student()throws Exception{
    
    
    }
    public void print(){
    
    
        String s=name.toString();
        System.out.println("姓名:"+name);
        System.out.println("年龄:"+age);
    }
}

RWClass-Klasse

package step2;
import java.io.*;
//在此写RWClass类
public class RWClass{
    
    
    private String filename;
    public RWClass(String filename){
    
    
        this.filename=filename;
    }
    public void saveStudent(Student ss,int pos) throws Exception{
    
    
        RandomAccessFile ra=new RandomAccessFile(filename,"rw");
        ra.seek(pos*24);
        try{
    
    
        for(int i=0;i<10;i++){
    
    
            ra.writeChar(ss.name[i]);
        }
        ra.writeInt(ss.age);
        }
        catch (ArrayIndexOutOfBoundsException e) {
    
    
          
        }
        ra.close();
    }
    public Student readStudent(int pos) throws Exception{
    
    
        char buf[]={
    
    '\u0000','\u0000','\u0000','\u0000','\u0000','\u0000','\u0000','\u0000','\u0000','\u0000'};
        int age=0;
        try{
    
    
        RandomAccessFile ra=new RandomAccessFile(filename,"r");
        ra.seek(pos*24);
        for(int i=0;i<10;i++){
    
    
            buf[i]=ra.readChar();
        }
        age=ra.readInt();
         }catch (EOFException e) {
    
    
          
        }
        String str=buf.toString();
        Student ss=new Student(str,age);
        return ss;
    }
}

Aufgaben für dieses Level: Erstellen Sie drei Threads Thread1, Thread2 und Thread3. Drei Threads müssen synchron geplant werden.

Anforderungen:
Unabhängig von der Priorität jedes Threads und der Ruhezeit jedes Threads wird Thread1 zuerst ausgeführt, und nachdem die Daten abgerufen wurden, werden die Daten im Datenobjekt gespeichert. Thread2 nimmt den Wert vom Datenobjekt, addiert 10 und speichert ihn zurück zum Datenobjekt und gibt es aus; Thread3 beginnt mit Addieren Sie 10 zum Wert im Datenobjekt und geben Sie ihn aus. Diese drei Threads müssen synchron ausgeführt werden und die Ausführungssequenz ist wie folgt:

Das Experiment hat eine Klasse Gatherinfo definiert (wie unten gezeigt), und die GetVal()-Methode dieser Klasse schließt die Datengenerierung ab.

class Gatherinfo{ public int GetVal() { int n = (int)(Math.random()*20+10); return n; } } Die Thread Thread1-Klasse erbt die Klasse Gatherinfo und ruft GetVal( in der Gatherinfo-Klasse in der Thread1-Klasse direkt auf )-Methode, um die gesammelten Daten zu erhalten. Die Klasse dataObj vervollständigt den Datenaustausch jedes Threads. Es gibt zwei Methoden: void put(int n); Daten im Datenobjekt speichern. int get(); gibt die Daten im Datenobjekt zurück. Das Gatherinfo-System ist fertiggestellt und es besteht für niemanden mehr die Notwendigkeit, solche Programme zu schreiben.“ Jeder Thread wird mehr als zehnmal in einer Schleife ausgeführt und das Ausgabeformat jedes Threads ist wie folgt: 10 20 30 16 26 36 Jede Zahl repräsentiert die Ausgabe eines Threads. Schließen Sie das Schreiben der Klassen Thread1, Thread2 und Thread3 nach Bedarf ab.















Entwerfen Sie abschließend eine Klasse zum Testen aller Ihrer Programme.

Starten Sie Ihre Mission und wünschen Ihnen viel Erfolg!

dataObj-Klasse`

package step1;
//在此写dataObj类
public class dataObj{
    
    
    private int a=0;
    public dataObj(){
    
    
        
    }
    public void put(int n){
    
    
        this.a=n;
    }
    public int get(){
    
    
        return a;
    }
}

Thread1-Klasse

package step1;
//在此写Thread1类
class Thread1 extends Gatherinfo implements Runnable{
    
    
  dataObj k=null;
   private int m=0;
    public Thread1(dataObj k){
    
    
        this.k=k;
    }
   
 public void run(){
    
    
    // Gatherinfo c=new Gatherinfo();
    for(int i=0;i<11;i++){
    
    
     int n=this.GetVal();
     System.out.print(n+" ");
     n=n+10;
     k.put(n);
     //Thread.sleep()
     }
 }
    /* public static void main(String[] args) {
         dataObj obj=null;
         Thread1 t1=new Thread1(obj);
         Thread2 t2=new Thread2(obj);
         Thread3 t3=new Thread3(obj);
         new Thread(t1).start();
         new Thread(t2).start();
         new Thread(t3).start();
         */
    }
 
    

Thread2-Klasse

package step1;
//在此写Thread2类
class Thread2 extends Thread{
    
    
   private dataObj k=null;
   private int m=0;
    public Thread2(dataObj k){
    
    
        this.k=k;
    }
    
 public void run(){
    
    
     for(int i=0;i<11;i++)
     {
    
    
     
     int n=k.get();
     System.out.print(n+" ");
     n=n+10;
     k.put(n);
     }
 }
}

Thread3-Klasse

package step1;
//在此写Thread3类
class Thread3 extends Thread{
    
    
  dataObj k=null;
   private int m=0;
    public Thread3(dataObj k){
    
    
        this.k=k;
    }
     
 public void run(){
    
    
     for(int i=0;i<11;i++){
    
    
     
     int n=k.get();
     System.out.println(n);
     n=n+10;
     k.put(n);
     }
 }
}

Guess you like

Origin blog.csdn.net/qq_57109165/article/details/122072553