ورود

View Full Version : سوال: حل مسئله گربه‌های فضایی مسابقه بیان



sajjad4563
پنج شنبه 17 مهر 1393, 00:29 صبح
سلام دوستان

یکی از سئوالات مسابقه بیان، مسئله گربه های فضایی هست
ساده اش اینه که یه جدول n*n داریم که متحرک(گربه) از پایین ترین و سمت چپ ترین خانه شروع میکنه و اولویت حرکتش به سمت بالا هست، اگه نتونست بالا بره یه خانه با راست میره و دوباره سعی میکنه به بالا بره تا اینکه در نهایت به گوشه سمت راست بالا برسه و هر خونه ای رو که میره به ترتیب حروف الفبای انگلیسی توشون قرار میده.
اگه خونه ای که میخواد بره با "-" نشون داده شده، پس میتونه بره، ولی اگه با " * " نشون داده شده، نمیتونه بره

یه نمونه از حرکت :

124374

نمونه ورودی:

3 (همون n است)

- - -
- - *
- - -

نمونه خروجی که باید تولید بشه:

124375
این کد من هست:


import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Arrays;

public class cats {

static char ch = 'a';

static Integer cols = 0;
static Integer rows = 0;

public static void main(String[] args) throws Exception {
start();
}

public static void start() throws Exception {
BufferedReader br = new BufferedReader(new FileReader("cats.txt"));
int arrayLength = Integer.parseInt(br.readLine());

Integer rows = arrayLength - 1;

char[] splitedLine = new char[3];
char[][] map = new char[3][3]; // create map
char[][] map2 = new char[3][3]; // output map
boolean up = false;
boolean right = false;

// create map[][]
for (int j = 0; j < 3; j++) {
String line = br.readLine();
for (int i = 0; i < 3; i++) { // for each char of rows

splitedLine[i] = line.charAt(i); // up line
}

//set each line to map and show each line
map[j] = Arrays.copyOf(splitedLine, 3);
System.out.println("Map: " + Arrays.toString(map[j]));
}

System.out.println();

//copy map array to map2
map2 = Arrays.copyOf(map, map.length);

// first place char is 'a'
map2[map2.length - 1][0] = 'a'; //ok

up = false;
right = false;

//check for UP
while (checkForUpAndGo(rows, cols, map2) && rows >= 0) {
up = true;
}

if (checkForRightAndGo(rows, cols, map2) && cols < arrayLength) {
right = true;

while (checkForUpAndGo(rows, cols, map2) && rows >= 0) {
up = true;
}
}

//show each lines of map2
System.out.println("Final Map2:");
for (int r = 0; r < map2.length; r++) {
System.out.println(Arrays.toString(map2[r]));
}
}

public static boolean checkForUpAndGo(Integer row, Integer col, char[][] array) {
System.out.println("CheckForUP: currentRow: " + row + " currentCol: " + col);
if (array[row - 1][col] == '-') {
System.out.println("Go UP, I'm in row: " + (row - 1) + " cols: " + col);
goUp(row, col, array);
return true;
}
return false;
}

public static boolean checkForRightAndGo(Integer row, Integer col, char[][] array) {
System.out.println("checkForRight, currentRow: " + row + " currentCol: " + col);
if (array[row][col + 1] == '-') {
System.out.println("Go Right to row: " + row + " col: " + (col + 1));
goRight(row, col, array);
return true;
}
return false;
}

public static void goUp(Integer row, Integer col, char[][] array) {
array[row - 1][col] = ++ch;
System.out.println("set: " + ch + " in row: " + (row - 1) + " col: " + col);
rows--;
}

public static void goRight(Integer row, Integer col, char[][] array) {
array[row][col + 1] = ++ch;
System.out.println("set: " + ch + " in row: " + row + " col: " + (col + 1));
cols++;
}
}


ولی خروجی من درست ولی ناقصه:

124376

ahmad.mo74
پنج شنبه 17 مهر 1393, 09:27 صبح
سلام، با فرض اینکه ماتریس مربعی داریم:

public static void main(String[] args) {
char[][] road = new char[][]{
{'-', '*', '-'}
, {'*', '-', '-'}
, {'-', '-', '-'}
};
List<Step> steps = new ArrayList<>();
Step start = new Step(road.length - 1, 0);
steps.add(new Step(start.getRow(), start.getCol()));
while (start.getRow() != 0) {
int next_row = start.getRow() - 1;
int next_col = start.getCol();
if (road[next_row][next_col] == '-') {
start.setRow(next_row);
start.setCol(next_col);
} else {
next_row = start.getRow();
next_col = start.getCol() + 1;
if (next_col >= road.length) {
break;
}
if (road[next_row][next_col] == '-') {
start.setRow(next_row);
start.setCol(next_col);
} else {
break;
}
}
steps.add(new Step(start.getRow(), start.getCol()));
}
char ch = 'a';
for (Step s : steps) {
road[s.getRow()][s.getCol()] = ch;
ch++;
}
Stream.of(road).forEach(System.out::println);
}



public class Step {


private int row;
private int col;


public Step(int row, int col) {
this.row = row;
this.col = col;
}


public int getRow() {
return row;
}


public void setRow(int row) {
this.row = row;
}


public int getCol() {
return col;
}


public void setCol(int col) {
this.col = col;
}


}


خروجی :


-*e
*cd
ab-

sajjad4563
پنج شنبه 17 مهر 1393, 11:37 صبح
سلام، با فرض اینکه ماتریس مربعی داریم:

public static void main(String[] args) {
char[][] road = new char[][]{
{'-', '*', '-'}
, {'*', '-', '-'}
, {'-', '-', '-'}
};
List<Step> steps = new ArrayList<>();
Step start = new Step(road.length - 1, 0);
steps.add(new Step(start.getRow(), start.getCol()));
while (start.getRow() != 0) {
int next_row = start.getRow() - 1;
int next_col = start.getCol();
if (road[next_row][next_col] == '-') {
start.setRow(next_row);
start.setCol(next_col);
} else {
next_row = start.getRow();
next_col = start.getCol() + 1;
if (next_col >= road.length) {
break;
}
if (road[next_row][next_col] == '-') {
start.setRow(next_row);
start.setCol(next_col);
} else {
break;
}
}
steps.add(new Step(start.getRow(), start.getCol()));
}
char ch = 'a';
for (Step s : steps) {
road[s.getRow()][s.getCol()] = ch;
ch++;
}
Stream.of(road).forEach(System.out::println);
}



public class Step {


private int row;
private int col;


public Step(int row, int col) {
this.row = row;
this.col = col;
}


public int getRow() {
return row;
}


public void setRow(int row) {
this.row = row;
}


public int getCol() {
return col;
}


public void setCol(int col) {
this.col = col;
}


}


خروجی :


-*e
*cd
ab-


ممنونم ولی ایکاش مشکل کد من رو می گفتید!

ahmad.mo74
پنج شنبه 17 مهر 1393, 11:45 صبح
من که از کدهای شما چیزی سر در نیاوردم، توی cats.txt چیه؟

ahmad.mo74
پنج شنبه 17 مهر 1393, 12:32 عصر
public class Cats {


static char ch = 'a';


static int cols = 0;
static int rows = 0;


public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new FileReader("C:\\cats.txt"));
int arrayLength = Integer.parseInt(br.readLine());
rows = arrayLength - 1;
char[] splits = new char[arrayLength];
char[][] map = new char[arrayLength][arrayLength];
for (int j = 0; j < arrayLength; j++) {
String line = br.readLine();
for (int i = 0; i < arrayLength; i++) {
splits[i] = line.charAt(i);
}
map[j] = Arrays.copyOf(splits, arrayLength);
System.out.println("Map: " + Arrays.toString(map[j]));
}
System.out.println();
char[][] roadMap;
roadMap = Arrays.copyOf(map, map.length);
roadMap[roadMap.length - 1][0] = ch;
long start = System.nanoTime();
while (true) {
if (!checkForUpAndGo(roadMap) && !checkForRightAndGo(roadMap)) {
System.out.println("End of the road!");
break;
}
}
long end = System.nanoTime();
System.out.println("\nFinal Map:");
for (char[] chars : roadMap) {
System.out.println(Arrays.toString(chars));
}
System.out.println("\nsolved in " + (end - start) + " ns");
}


public static boolean checkForUpAndGo(char[][] array) {
System.out.println("CheckForUP: currentRow: " + rows + " currentCol: " + cols);
if (rows == 0) {
return false;
}
if (array[rows - 1][cols] == '-') {
System.out.println("Go UP, I'm in row: " + (rows - 1) + " cols: " + cols);
goUp(array);
return true;
}
return false;
}


public static void goUp(char[][] array) {
array[rows - 1][cols] = ++ch;
System.out.println("set: " + ch + " in row: " + (rows - 1) + " col: " + cols);
rows--;
}


public static boolean checkForRightAndGo(char[][] array) {
System.out.println("checkForRight, currentRow: " + rows + " currentCol: " + cols);
if (cols == array.length - 1) {
return false;
}
if (array[rows][cols + 1] == '-') {
System.out.println("Go Right to row: " + rows + " col: " + (cols + 1));
goRight(array);
return true;
}
return false;
}


public static void goRight(char[][] array) {
array[rows][cols + 1] = ++ch;
System.out.println("set: " + ch + " in row: " + rows + " col: " + (cols + 1));
cols++;
}


}


cats.txt :


7
-----**
*--**--
-------
--*----
-------
**-----
-------


خروجی :


Map: [-, -, -, -, -, *, *]
Map: [*, -, -, *, *, -, -]
Map: [-, -, -, -, -, -, -]
Map: [-, -, *, -, -, -, -]
Map: [-, -, -, -, -, -, -]
Map: [*, *, -, -, -, -, -]
Map: [-, -, -, -, -, -, -]


CheckForUP: currentRow: 6 currentCol: 0
checkForRight, currentRow: 6 currentCol: 0
Go Right to row: 6 col: 1
set: b in row: 6 col: 1
CheckForUP: currentRow: 6 currentCol: 1
checkForRight, currentRow: 6 currentCol: 1
Go Right to row: 6 col: 2
set: c in row: 6 col: 2
CheckForUP: currentRow: 6 currentCol: 2
Go UP, I'm in row: 5 cols: 2
set: d in row: 5 col: 2
CheckForUP: currentRow: 5 currentCol: 2
Go UP, I'm in row: 4 cols: 2
set: e in row: 4 col: 2
CheckForUP: currentRow: 4 currentCol: 2
checkForRight, currentRow: 4 currentCol: 2
Go Right to row: 4 col: 3
set: f in row: 4 col: 3
CheckForUP: currentRow: 4 currentCol: 3
Go UP, I'm in row: 3 cols: 3
set: g in row: 3 col: 3
CheckForUP: currentRow: 3 currentCol: 3
Go UP, I'm in row: 2 cols: 3
set: h in row: 2 col: 3
CheckForUP: currentRow: 2 currentCol: 3
checkForRight, currentRow: 2 currentCol: 3
Go Right to row: 2 col: 4
set: i in row: 2 col: 4
CheckForUP: currentRow: 2 currentCol: 4
checkForRight, currentRow: 2 currentCol: 4
Go Right to row: 2 col: 5
set: j in row: 2 col: 5
CheckForUP: currentRow: 2 currentCol: 5
Go UP, I'm in row: 1 cols: 5
set: k in row: 1 col: 5
CheckForUP: currentRow: 1 currentCol: 5
checkForRight, currentRow: 1 currentCol: 5
Go Right to row: 1 col: 6
set: l in row: 1 col: 6
CheckForUP: currentRow: 1 currentCol: 6
checkForRight, currentRow: 1 currentCol: 6
End of the road!


Final Map:
[-, -, -, -, -, *, *]
[*, -, -, *, *, k, l]
[-, -, -, h, i, j, -]
[-, -, *, g, -, -, -]
[-, -, e, f, -, -, -]
[*, *, d, -, -, -, -]
[a, b, c, -, -, -, -]


solved in 502919 ns

محمد فدوی
پنج شنبه 17 مهر 1393, 17:56 عصر
سجاد جان خیلی سعی کردم کدت رو اصلاح کنم! ولی واقعا دیدم باید از اول بنویسمش! اولا با برنامه نویسی ساخت‌یافته آشنا شو. ثانیا کدنویسیت رو خوانا کن. به قول یکی از دوستان آدم حس می‌کنه داره انشا می‌خونه!
تازه کدت پر از ایرادای ریز ریزه! یکم دانشت رو زیادتر کنی موفق‌تری.

vahid-p
پنج شنبه 17 مهر 1393, 18:04 عصر
اینم کد من :
البته واسه مسابقه سوالات گلچینش فکر کنم مشکل داره سیستمشون. چون من حتی جمع دو عدد رو وارد کردم، میگفت غلطه. ولی مسابقه امروزش ( مرحله ورودی ) هر سه تا خروجیمو درست گرفت.

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
public static void main(String[] args) throws FileNotFoundException {
Scanner cin=new Scanner(new FileInputStream("file.in"));
int n=cin.nextInt();
int t;
char table[][];
String str;

for(int i=0;i<n;i++){
t=cin.nextInt();
table=new char[t][t];
for(int j=0;j<t;j++){
str=cin.next();
for(int z=0;z<t;z++){
table[j][z]=str.charAt(z);
}
}
print(go(table,t),t);
}
}
public static char[][] go(char table[][],int t){
int i=t-1,j=0;
table[t-1][0]='a';
char ch='b';
while(true){
if(i>0 && table[i-1][j]!='*'){
i--;
table[i][j]=ch;
ch++;
}else if(j<t-1 && table[i][j+1]!='*'){
j++;
table[i][j]=ch;
ch++;
}else{
break;
}
if(i==0 && j==t-1) break;
if(ch>'z') break;
}
return table;
}

private static void print(char[][] table, int t) {
for(int i=0;i<t;i++){
for(int j=0;j<t;j++){
System.out.print(table[i][j]);
}
System.out.println();
}
}
}



مثلا به ازای ورودی :

32
----**----------*-*--*---*-----*
*-------------*------*--*---*---
--*---***-----*---**------------
---*---------*-------*----------
-----------------------*-*------
---*--*------*--*------*--------
-----------*---------*---*---*--
*--------------*----------------
-------*----*--*--------*-------
-------*---*-----------*-----*--
*---------*----------*-*--------
------------------------*-------
*--------------------*----------
**----*---------*-**------------
------------------------*-------
------------------*------**-----
-----*-------**------*----------
-*-----------**---------*-----*-
-*-------*------------*-*-------
-*--**--------*----------------*
-*------*--*---------*-*--------
-------------*------------*-----
-*-------------------------*----
-----*--*----------------*------
*-*---*-------*-----------*-----
*---------*-----------*---------
*-----*--------*--*--*---------*
-----**-**----*-*---------*-----
-----------------------*--------
--------*-*-----------*---------
-------------**-*---------------
---------*--------**------------

خروجی میده :

----**----------*-*--*---*-----*
*-------------*------*--*---*---
--*---***-----*---**------------
---*---------*-------*----------
-----------------------*-*------
---*--*------*--*------*--------
-----------*---------*---*---*--
*--------------*----------------
--z----*----*--*--------*-------
--y----*---*-----------*-----*--
*-x-------*----------*-*--------
--w---------------------*-------
*-v------------------*----------
**u---*---------*-**------------
--t---------------------*-------
--s---------------*------**-----
--r--*-------**------*----------
-*q----------**---------*-----*-
-*p------*------------*-*-------
-*o-**--------*----------------*
-*n-----*--*---------*-*--------
--m----------*------------*-----
-*l------------------------*----
-jk--*--*----------------*------
*i*---*-------*-----------*-----
*h--------*-----------*---------
*g----*--------*--*--*---------*
ef---**-**----*-*---------*-----
d----------------------*--------
c-------*-*-----------*---------
b------------**-*---------------
a--------*--------**------------

ahmad.mo74
پنج شنبه 17 مهر 1393, 18:53 عصر
سلام، مشکل کدتون رو متوجه شدین؟ بیشتر خطوط 53 تا 63 مشکل داشت، در کل سعی کردم جوری درستش کنم که شبیه کد خودت بشه!

sajjad4563
پنج شنبه 17 مهر 1393, 18:54 عصر
سجاد جان خیلی سعی کردم کدت رو اصلاح کنم! ولی واقعا دیدم باید از اول بنویسمش! اولا با برنامه نویسی ساخت‌یافته آشنا شو. ثانیا کدنویسیت رو خوانا کن. به قول یکی از دوستان آدم حس می‌کنه داره انشا می‌خونه!
تازه کدت پر از ایرادای ریز ریزه! یکم دانشت رو زیادتر کنی موفق‌تری.

آره خودمم میدونم که متاسفانه خیلی بد مینویسم

منظور از ساخت یافته چیه؟
یعنی ماژول بندی کنم؟

ایراد ریز ریز منظورت کدوماست حدودا؟

تنک یو

sajjad4563
پنج شنبه 17 مهر 1393, 18:55 عصر
سلام، مشکل کدتون رو متوجه شدین؟ بیشتر خطوط 53 تا 63 مشکل داشت، در کل سعی کردم جوری درستش کنم که شبیه کد خودت بشه!

سلام بله

متوجه شدم
ممنونم از شما

محمد فدوی
پنج شنبه 17 مهر 1393, 21:19 عصر
کد ساخت یافته به کدی می‌گن که مسئله رو به چندبخش تقسیم می‌کنه. مثلا اگه یه قسمت از کد مربوط انجام حرکت بعدیه، همه‌ی کارهاش توی همین متد انجام می‌شه و هیچ ردپایی ازش توی بخشای دیگه دیده نمی‌شه. بهتر بگم، کد وقتی ساخت‌یافته‌ست که مسئله رو به چند بخش تقسیم کنه، و هر بخش خودش به تنهایی انگار یه برنامه‌ست! ورودی داره، خروجی داره... حتی ممکنه بعد از اینکه یه مسئله رو به چند زیر مسئله تقسیم کردی به این نتیجه برسی که هنوز نیاز به تقسیم داری! باز میای و هر بخش رو تیکه تیکه می‌کنی و همون داستان بالا...
اینجوری توی کدت گم نمی‌شی. وقتی داری در مورد پیش‌بینی حرکت بعدی گربه می‌نویسی خیالت از نمایش نهایی نقشه راحته چون اون خودش تیکه کد (متد) مربوط به خودش رو داره. حتی Debug کردن رو هم راحت می‌کنه. چون شما هر تیکه رو جداگونه اشکالیابی می‌کنی. اما الان این کد شما همه‌ش به هم وصله و اگه ایرادی توش دیده شه باید همه‌ش رو بررسی کرد!

اما در مورد ایرادای ریزی که توی برنامه‌ت هست و علاوه بر پایین آوردن Performance، خواننده رو خسته می‌کنه:
۱. دلیلی نداره اینجا به جای int از Integer استفاده کنی. می‌دونم می‌خواستی توی متدهات مقدارشون رو کم و زیاد کنی ولی این همون چیزیه که ساخت‌یافتگی رو کم می‌کنه.
۲. دلیلی نداشت که map2 ساخته بشه. می‌تونستی کارات رو توی همون map انجام بدی. حتی اگرم قراره اطلاعاتت رو توی یه ماتریس جدید بنویسی بهتره نامگذاری بهتری انتخاب کنی، مثلا به جای map و map2 میتونستی از inMap و outMap استفاده کنی. درضمن لازم نبود map و map2 بطور کامل مقداردهی شن. چون بعدا مقدار میگیرن. کافیه اینجوری ساخته شن:

char[][] map = new char[3][];
char[][] map2 = new char[3][];


۳. کدت رو بی دقت نوشتی. مثلا یه بار توی تعریف right و up (که خیلی هم نیازی به تعریفشون حس نمی‌شه) مقداردهی کردی:

boolean right = false;
boolean up = false;

ولی دوباره چندخط پایین‌تر مقداردهیشون کردی به false! (کار اضافی)

۴. قرارداد خودت این بوده که سایز ماتریس رو از توی فایل cats.txt بخونی! ولی اومدی map و map2 و حلقه‌ی for رو با عدد ۳ تعریف کردی. اگه تو فایل نوشته شده بود ۴ چی؟!

۵. خواستی با اضافه کردن throws Exception به متد start و main کارت رو راحت کنی برای مقابله با استثناءها. اما واقعیت اینه که اینکار هم کار خودت رو برای Debug سخت می‌کنه هم من خواننده که دارم کدت رو برای اولین بار می‌خونم.

۶. استاندارد بر اینه که کلاس‌های Java با حرف بزرگ شروع شن. با توجه به این نام cats نامناسبه. چیزی مثل Cats یا Main یا Program مطابق استانداردهاست.

اصلا اینجا سعی نکردم به دلیل ایراد کدت در اجرا اشاره کنم. فقط ایرادهایی رو گفتم که در نوشتن کدت دیده می‌شه. در ظاهر شاید اینا بی‌اهمیت باشن. و واقعنم اگه بتونیم تضمین کنیم ما همیشه برنامه‌هامونو درست می‌نویسیم و کامپایل می‌کنیم و بعدا هم دیگه نمیایم سراغشون این حرف درسته. ولی تقریبا همیشه اینطور نیست! ما کدهامون ایرادهای زیادی داره، در ضمن ممکنه بخوایم به کسی نشونش بدیم و تازه اگر اینطورم نباشه معمولا اگه مثل من کدهاتونو آرشیو کنید بعد از ۳سال میاید و می‌بینید کلا براتون جدیده!
همه اینا می‌طلبه که ما توی کدنویسی از قواعدی پیروی کنیم. یه سری قوانین از پیش تعریف شده وجود داره و بعضی چیزا هم وابسته به سلیقه‌ی برنامه‌نویسه. حتی اگه دوست داری می‌تونی خودت همه چیزو از اول قرارداد کنی و بری جلو. چیزی که مهمه وفاداری به قراردادهاییه که برای خودت انجام دادی.

sajjad4563
پنج شنبه 17 مهر 1393, 21:52 عصر
کد ساخت یافته به کدی می‌گن که مسئله رو به چندبخش تقسیم می‌کنه. مثلا اگه یه قسمت از کد مربوط انجام حرکت بعدیه، همه‌ی کارهاش توی همین متد انجام می‌شه و هیچ ردپایی ازش توی بخشای دیگه دیده نمی‌شه. بهتر بگم، کد وقتی ساخت‌یافته‌ست که مسئله رو به چند بخش تقسیم کنه، و هر بخش خودش به تنهایی انگار یه برنامه‌ست! ورودی داره، خروجی داره... حتی ممکنه بعد از اینکه یه مسئله رو به چند زیر مسئله تقسیم کردی به این نتیجه برسی که هنوز نیاز به تقسیم داری! باز میای و هر بخش رو تیکه تیکه می‌کنی و همون داستان بالا...
اینجوری توی کدت گم نمی‌شی. وقتی داری در مورد پیش‌بینی حرکت بعدی گربه می‌نویسی خیالت از نمایش نهایی نقشه راحته چون اون خودش تیکه کد (متد) مربوط به خودش رو داره. حتی Debug کردن رو هم راحت می‌کنه. چون شما هر تیکه رو جداگونه اشکالیابی می‌کنی. اما الان این کد شما همه‌ش به هم وصله و اگه ایرادی توش دیده شه باید همه‌ش رو بررسی کرد!

اما در مورد ایرادای ریزی که توی برنامه‌ت هست و علاوه بر پایین آوردن Performance، خواننده رو خسته می‌کنه:
۱. دلیلی نداره اینجا به جای int از Integer استفاده کنی. می‌دونم می‌خواستی توی متدهات مقدارشون رو کم و زیاد کنی ولی این همون چیزیه که ساخت‌یافتگی رو کم می‌کنه.
۲. دلیلی نداشت که map2 ساخته بشه. می‌تونستی کارات رو توی همون map انجام بدی. حتی اگرم قراره اطلاعاتت رو توی یه ماتریس جدید بنویسی بهتره نامگذاری بهتری انتخاب کنی، مثلا به جای map و map2 میتونستی از inMap و outMap استفاده کنی. درضمن لازم نبود map و map2 بطور کامل مقداردهی شن. چون بعدا مقدار میگیرن. کافیه اینجوری ساخته شن:

char[][] map = new char[3][];
char[][] map2 = new char[3][];


۳. کدت رو بی دقت نوشتی. مثلا یه بار توی تعریف right و up (که خیلی هم نیازی به تعریفشون حس نمی‌شه) مقداردهی کردی:

boolean right = false;
boolean up = false;

ولی دوباره چندخط پایین‌تر مقداردهیشون کردی به false! (کار اضافی)

۴. قرارداد خودت این بوده که سایز ماتریس رو از توی فایل cats.txt بخونی! ولی اومدی map و map2 و حلقه‌ی for رو با عدد ۳ تعریف کردی. اگه تو فایل نوشته شده بود ۴ چی؟!

۵. خواستی با اضافه کردن throws Exception به متد start و main کارت رو راحت کنی برای مقابله با استثناءها. اما واقعیت اینه که اینکار هم کار خودت رو برای Debug سخت می‌کنه هم من خواننده که دارم کدت رو برای اولین بار می‌خونم.

۶. استاندارد بر اینه که کلاس‌های Java با حرف بزرگ شروع شن. با توجه به این نام cats نامناسبه. چیزی مثل Cats یا Main یا Program مطابق استانداردهاست.

اصلا اینجا سعی نکردم به دلیل ایراد کدت در اجرا اشاره کنم. فقط ایرادهایی رو گفتم که در نوشتن کدت دیده می‌شه. در ظاهر شاید اینا بی‌اهمیت باشن. و واقعنم اگه بتونیم تضمین کنیم ما همیشه برنامه‌هامونو درست می‌نویسیم و کامپایل می‌کنیم و بعدا هم دیگه نمیایم سراغشون این حرف درسته. ولی تقریبا همیشه اینطور نیست! ما کدهامون ایرادهای زیادی داره، در ضمن ممکنه بخوایم به کسی نشونش بدیم و تازه اگر اینطورم نباشه معمولا اگه مثل من کدهاتونو آرشیو کنید بعد از ۳سال میاید و می‌بینید کلا براتون جدیده!
همه اینا می‌طلبه که ما توی کدنویسی از قواعدی پیروی کنیم. یه سری قوانین از پیش تعریف شده وجود داره و بعضی چیزا هم وابسته به سلیقه‌ی برنامه‌نویسه. حتی اگه دوست داری می‌تونی خودت همه چیزو از اول قرارداد کنی و بری جلو. چیزی که مهمه وفاداری به قراردادهاییه که برای خودت انجام دادی.

ممنونم از شما.

mohamamd 123
سه شنبه 11 فروردین 1394, 17:17 عصر
Error: Could not find or load main class گربه.فضايي.cats
Java Result: 1
این ارور یعنی چی