prg-lang-2 / week12 / Exer14OOP.java
Exer14OOP.java
Raw
// 課題14 単方向リスト ループ
/*
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LIMIT_LOW 0
#define LIMIT_HIGH 25

// 構造体の定義
typedef struct tag {
  int temp;   // 温度
  struct tag *next; // 自分自身の型へのポインタ変数
} tempData;       // 温度データ


// 新データ作成関数
tempData* makeNewNode(int t) {
  tempData* pNewNode;
  //** person 型のメモリ領域確保 **
  pNewNode = (tempData*)malloc(sizeof(tempData));
  if (pNewNode != NULL) {
    //** データ設定 **
    pNewNode->temp= t;
    pNewNode->next = NULL;
  }
  return pNewNode ;
}


int main(void) {
  int temp; // 温度入力用変数
  tempData *pTop;  // 温度データリストのトップ
  tempData *pNow;  // 温度データリスト内の現在位置
  tempData *pNew;  // 温度データの新規データ
  // 必要であれば,ここに変数を追加
  int c, ave;


  // 最初のデータは,必ず範囲内のデータであるとする
  scanf("%d", &temp);
  ave = temp;
  pTop = makeNewNode(temp);
  pNow = pTop;
  // 次のデータを入力
  scanf("%d", &temp);

  c = 1;
  while ( (LIMIT_LOW <= temp) && (temp <= LIMIT_HIGH)) {
    // ここにリスト作成処理を記述
    pNew = makeNewNode(temp);
    pNow->next = pNew;
    pNow = pNew;

    ave = ave + temp;
    c = c + 1;
    // 次のデータを入力
    scanf("%d", &temp);
  }
  ave = ave / c ;


  // ここに平均より大きいデータだけ表示する処理
  pNow = pTop;
  while (pNow != NULL) {
    if (pNow->temp > ave) {
      printf("%d\n", pNow->temp);
    }
    pNow = pNow->next;
  }

  return 0 ;
}
*/
import java.util.Scanner;

public class Exer14OOP {
    public static final int LIMIT_LOW = 0;
    public static final int LIMIT_HIGH = 25;

    public static void main(String[] args) {
        int temp; // 温度入力用変数
        TempData14OOP pTop; // 温度データリストのトップ
        TempData14OOP pNew; // 温度データの新規データ

        // 最初のデータは,必ず範囲内のデータであるとする
        Scanner scanner = new Scanner(System.in);
        temp = scanner.nextInt();
        pTop = new TempData14OOP(temp);
        // 次のデータを入力
        temp = scanner.nextInt();

        while ((LIMIT_LOW <= temp) && (temp <= LIMIT_HIGH)) {
            // ここにリスト作成処理を記述
            pNew = new TempData14OOP(temp);
            pTop.insert(pNew);
            temp = scanner.nextInt();
        }
        scanner.close();

        int avg = pTop.getAverage();
        pTop.print(avg);
    }
}

class TempData14OOP {
    public int temp; // 温度
    public TempData14OOP next; // 次のデータ

    public TempData14OOP(int t) {
        temp = t;
        next = null;
    }

    public void insert(TempData14OOP data) {
        if (next == null) {
            next = data;
        } else {
            next.insert(data);
        }
    }

    public int getCount() {
        if (next == null) {
            return 1;
        }
        return next.getCount() + 1;
    }

    public int getSum() {
        if (next == null) {
            return temp;
        }
        return next.getSum() + temp;
    }

    public int getAverage() {
        return getSum() / getCount();
    }

    public void print(int average) {
        if (temp > average) {
            System.out.printf("%d\n", temp);
        }
        if (next != null) {
            next.print(average);
        }
    }
}