คลาสหาค่าสูงสุดในอาร์เรย์ 2 มิติ
โจทย์
เขียนคลาส Java ชื่อ Location ที่ระบุค่าสูงสุดและตำแหน่งของค่านั้นในอาร์เรย์สองมิติ คลาสควรมีคุณสมบัติดังนี้:
- แอตทริบิวต์ (หรือฟิลด์ข้อมูล)
- แอตทริบิวต์ public ชื่อ “row”, “column”, และ “maxValue” ที่เก็บค่าสูงสุดและดัชนีของมันในอาร์เรย์สองมิติ โดย row และ column เป็นชนิด int และ maxValue เป็นชนิด double
- เมธอด
- แสดงตำแหน่งของค่าสูงสุดและค่าของมันในอาร์เรย์
หมายเหตุ: องค์ประกอบจะถือว่า “สูงสุด” ก็ต่อเมื่อไม่มีองค์ประกอบอื่นที่มากกว่า
| Input | Output |
|---|---|
| 3 4 23.5 35 2 10 4.5 3 45 3.5 35 44 5.5 9.6 | The location of the largest element is 45.0 at (1, 2). |
โค้ด
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int row = scanner.nextInt();
int column = scanner.nextInt();
double[][] array = new double[row][column];
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
array[i][j] = scanner.nextDouble();
}
}
Location location = new Location();
location.row = row;
location.column = column;
location.maxValue = Integer.MIN_VALUE;
location.getLargestElement(array);
}
}
class Location {
public int row;
public int column;
public double maxValue;
public void getLargestElement(double[][] array) {
int x = 0, y = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
double number = array[i][j];
if (number > maxValue) {
maxValue = number;
x = i;
y = j;
}
}
}
System.out.println("The location of the largest element is " + maxValue + " at (" + x + ", " + y +").");
}
}ภาพรวมของโปรแกรม
โปรแกรมนี้ถูกสร้างขึ้นเพื่อหาค่าที่มากที่สุดในตารางข้อมูลสองมิติ (เหมือนตารางในโปรแกรม Excel) และบอกตำแหน่งของค่านั้น โปรแกรมประกอบด้วยสองส่วนหลัก:
- คลาส
Main: เป็นส่วนที่รับข้อมูลจากผู้ใช้และเริ่มต้นการทำงาน - คลาส
Location: เป็นส่วนที่ค้นหาค่าที่มากที่สุดและตำแหน่งของมัน
คลาส Main
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// โค้ดอยู่ที่นี่
}
}import java.util.Scanner;: บรรทัดนี้บอกโปรแกรมว่าเราจะใช้เครื่องมือที่ชื่อScannerเพื่อรับข้อมูลจากผู้ใช้public class Main: นี่คือการประกาศคลาสหลักของเรา ซึ่งเป็นที่เก็บโค้ดทั้งหมดpublic static void main(String[] args): นี่คือจุดเริ่มต้นของโปรแกรม ทุกอย่างเริ่มทำงานจากที่นี่
ขั้นตอนการทำงานในคลาส Main
- รับขนาดของตาราง:
Scanner scanner = new Scanner(System.in);
int row = scanner.nextInt();
int column = scanner.nextInt();- สร้างเครื่องมือ
Scannerเพื่อรับข้อมูล - รับจำนวนแถว (
row) และจำนวนคอลัมน์ (column) จากผู้ใช้
- สร้างและเติมข้อมูลลงในตาราง:
double[][] array = new double[row][column];
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
array[i][j] = scanner.nextDouble();
}
}- สร้างตารางว่างๆ ขนาดตามที่ผู้ใช้กำหนด
- วนลูปเพื่อรับค่าจากผู้ใช้และเติมลงในตาราง
- ใช้คลาส Location เพื่อหาค่าสูงสุด:
Location location = new Location();
location.row = row;
location.column = column;
location.maxValue = Integer.MIN_VALUE;
location.getLargestElement(array);- สร้างวัตถุ
locationจากคลาสLocation - กำหนดค่าเริ่มต้นให้กับ
row,column, และmaxValue - เรียกใช้เมธอด
getLargestElementเพื่อหาค่าสูงสุดในตาราง
คลาส Location
class Location {
public int row;
public int column;
public double maxValue;
public void getLargestElement(double[][] array) {
// โค้ดอยู่ที่นี่
}
}- คลาสนี้มีตัวแปร 3 ตัว:
row,column, และmaxValue - มีเมธอด
getLargestElementที่ใช้หาค่าสูงสุดในตาราง
การทำงานของเมธอด getLargestElement
public void getLargestElement(double[][] array) {
int x = 0, y = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
double number = array[i][j];
if (number > maxValue) {
maxValue = number;
x = i;
y = j;
}
}
}
System.out.println("The location of the largest element is " + maxValue + " at (" + x + ", " + y +").");
}- เริ่มต้นด้วยการกำหนดตัวแปร
xและyเป็น 0 (จะใช้เก็บตำแหน่งของค่าสูงสุด) - วนลูปผ่านทุกช่องในตาราง:
- ถ้าเจอค่าที่มากกว่า
maxValueปัจจุบัน: - อัปเดต
maxValueเป็นค่าใหม่ที่พบ - จดจำตำแหน่ง
xและyของค่านั้น
- ถ้าเจอค่าที่มากกว่า
- เมื่อวนลูปครบทุกช่อง จะได้ค่าสูงสุดและตำแหน่งของมัน
- พิมพ์ผลลัพธ์ออกมา บอกทั้งค่าสูงสุดและตำแหน่งของมัน
ปรับปรุงล่าสุด