人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

二重ループにつきまして

Javaの質問です。こちらにサンプルコード
https://gist.github.com/AuroraNorthernQuarter/d7581504171559e521183af86719d1a9
がありまして、問題なく動いてはいるのですが。
コードをスッキリさせたいと考えております。
for文の二重ループ?というんでしょうか。この部分だけ、新たなクラスとして別のjavaファイルに持っていきまして。
本体(Sampleクラス)から、呼び出すような形にして、同時に、二重ではなくスッキリ見せたいのですが。
方法等ありましたらお教えいただけないでしょうか。
よろしくお願い致します。

●質問者: moon-fondu
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● rsc
●1000ポイント ベストアンサー

こちらは参考になるでしょうか。

package testprogramm;

import java.util.Scanner; 

class Person {
 private String name = "";
 private double height = 0.0;
 
 //--- コンストラクタ ---//
 Person() { }
 Person(String name, double height) { set(name, height); }

 //--- 取得 ---//
 String getName() { return name; }
 double getHeight() { return height; }
 
 //--- 設定 ---//
 void setName(String name) { this.name = name; }
 void setHeight(double height) { this.height = height; }
 void set(String name, double height){
 this.name = name;
 this.height = height;
 }
 //--- 文字列表現を返却 ---//
 public String toStr(){
 return name + ":"+ height + "cm";
 }
 public String toStr(int n){
 if (n==0) return name;
 else return height + "cm";
 }
}
 
public class Sample { 

 static void Disp(Person[] p){
 int n = p.length;
 double sum = 0;
 for (int i = 0; i < n*n; i++){
 int m = (i%n==0)? i/n : i%n;
 if (0< i%n && i%n<=i/n) m-=1;
 System.out.println(p[m].toStr(i%n));
 }
 for (int i = 0; i< n; i++)
 sum = sum + p[i].getHeight();
 System.out.println("平均:" + sum/n+ "cm");
 }
 
 public static void main(String args[]) {

 Scanner scan = new Scanner(System.in); 

 while (true) { 
 System.out.print("得点を入力してください: "); 
 // キーボードから整数の入力を受け取る 
 int score = scan.nextInt(); 

 if (score > 90) { 
 System.out.println("おめでとう! 合格です"); 
 Person[] p = {
 new Person("鈴木", 168.7),
 new Person("杉山", 173.4),
 new Person("田中", 155.8),
 };
 Disp(p); 
 break; 
 } else if (score >= 60) { 
 System.out.println("もう少し頑張りましょう。"); 
 Person[] p = {
 new Person("橋本", 166.3),
 new Person("高杉", 159.1),
 new Person("佐藤", 177.4),
 };
 Disp(p); 
 break; 
 } else if (score < 0) { 
 break; 
 } 
 }
 scan.close(); 
 }
}

moon-fonduさんのコメント
rscさんありがとうございます、遅くなりましてすみません。 Personクラス、Sampleクラス、そしてmainメソッド、3つのjavaファイルで構成されるということでしょうか?ありがとうございます、javaファイルを分けてみたかったんです。 そして本体となるファイル、これはmainメソッドが入っている最後のコード文かと思いますが…mainメソッドが入っている部分は、 public static void main(String args[]) { Scanner scan = new Scanner(System.in); ・・・ と、クラス名「class ●● {…」のようなものが入っていないのですが。 mainメソッドのクラス名は何になるのでしょうか? 度々お手数お掛け致します<m(__)m>

rscさんのコメント
これは、一つのファイルにまとめています。分けるのであれば、次のようになります。(^_^; ● Sample.java >|Java| package testprogramm; import java.util.Scanner; public class Sample { static void Disp(Person[] p){ int n = p.length; double sum = 0; for (int i = 0; i < n*n; i++){ int m = (i%n==0)? i/n : i%n; if (0< i%n && i%n<=i/n) m-=1; System.out.println(p[m].toStr(i%n)); } for (int i = 0; i< n; i++) sum = sum + p[i].getHeight(); System.out.println("平均:" + sum/n+ "cm"); } public static void main(String[] args) { Scanner scan = new Scanner(System.in); while (true) { System.out.print("得点を入力してください: "); // キーボードから整数の入力を受け取る int score = scan.nextInt(); if (score > 90) { System.out.println("おめでとう! 合格です"); Person[] p = { new Person("鈴木", 168.7), new Person("杉山", 173.4), new Person("田中", 155.8), }; Disp(p); break; } else if (score >= 60) { System.out.println("もう少し頑張りましょう。"); Person[] p = { new Person("橋本", 166.3), new Person("高杉", 159.1), new Person("佐藤", 177.4), }; Disp(p); break; } else if (score < 0) { break; } } scan.close(); } } ||< ● Person.java >|| package testprogramm; public class Person { private String name = ""; private double height = 0.0; //--- コンストラクタ ---// Person() { } Person(String name, double height) { set(name, height); } //--- 取得 ---// String getName() { return name; } double getHeight() { return height; } //--- 設定 ---// void setName(String name) { this.name = name; } void setHeight(double height) { this.height = height; } void set(String name, double height){ this.name = name; this.height = height; } //--- 文字列表現を返却 ---// public String toStr(){ return name + ":"+ height + "cm"; } public String toStr(int n){ if (n==0) return name; else return height + "cm"; } } ||<

moon-fonduさんのコメント
rscさんありがとうございます。 ただ、何度も本当に恐縮なのですが。 Sample.javaを、すごくシンプルにしたいのです。 Sample.javaから、if文の中の橋本さんとか高杉さんを別のファイルから 呼び出したいのです。 自分は初心者なので、本体のファイル(Sample.java)から、 名前や身長など他の内容を部品にまとめたクラス(別のファイル)から呼び出すことで、 javaの基本的なオブジェクト指向的な部分を理解したいと考えております。 度々お手数お掛け致します、お手隙の時で構いませんので、 よろしくお願い致します<m(__)m>

moon-fonduさんのコメント
Person.javaは長くなっても構いませんので、よろしくお願いします。

rscさんのコメント
それなら、Person.javaはそのままで、Persons.javaを追加して、Sample.javaをそれに伴って修正してみます。(^_^; プログラムは、次のPerson.java、Persons.java、Sample.javaの3つから成ります。 ● Person.java 上記と同じなので省略。 ● Persons.java >|Java| package testprogramm; import java.util.ArrayList; public class Persons { private ArrayList<Person> persons; //--- コンストラクタ ---// public Persons() { this.persons = new ArrayList<Person>(); } public void add(Person person) { persons.add(person); } public int count() { return persons.size(); } //--- 平均値を求める ---// public double getAverage() { double sum = 0.0; for (Person p : persons) sum += p.getHeight(); return sum / (double)count(); } //--- 文字列表現を返却 ---// public String toStr() { int n = count(); String s = ""; for (int i = 0; i < n*n; i++){ int m = (i%n==0)? i/n : i%n; if (0< i%n && i%n<=i/n) m-=1; s += persons.get(m).toStr(i%n) + '\n'; } return s; } //--- Default Data の作成 ---// public void makeDefaultData1() { persons.add(new Person("鈴木", 168.7)); persons.add(new Person("杉山", 173.4)); persons.add(new Person("田中", 155.8)); } public void makeDefaultData2() { persons.add(new Person("橋本", 166.3)); persons.add(new Person("高杉", 159.1)); persons.add(new Person("佐藤", 177.4)); } //--- 表示 ---// public void Disp() { System.out.print (toStr()); System.out.println("平均:" + getAverage() + "cm"); } } ||< ● Sample.java >|Java| package testprogramm; import java.util.Scanner; public class Sample { static void Disp(Persons p){ System.out.print (p.toStr()); System.out.println("平均:" + p.getAverage() + "cm"); } public static void main(String[] args) { Scanner scan = new Scanner(System.in); while (true) { System.out.print("得点を入力してください: "); // キーボードから整数の入力を受け取る int score = scan.nextInt(); if (score > 90) { System.out.println("おめでとう! 合格です"); Persons p = new Persons(); p.makeDefaultData1(); p.Disp(); //Disp(p); break; } else if (score >= 60) { System.out.println("もう少し頑張りましょう。"); Persons p = new Persons(); p.makeDefaultData2(); p.Disp(); break; } else if (score < 0) { break; } } scan.close(); } } ||<
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ