Javaの初心者発生した問題の範囲で

Javaの初心者発生した問題の範囲で

実行後のforループの問題は、後者の文を続ける++私かどうか:質問1

例えば、コードのこの部分。

int i;
for (i = 0; i < 5; i++) {
	if (i == 4)
		continue;
}

引き続き実行最終的なI ++をスキップしなかった場合、ループのIの値または5の終了後、私は4に等しいです。コードのようにA片が存在する場合:

int i = 0;
while (i < 5) {
	if (i == 4)
		continue;
	i++;
}

このコードを実行する無限ループの結果です。私は4に等しい場合ので、私または4の値が、それは常に無限ループに行くとき、私は++、次のサイクルに入り、文の後ろにスキップ、文が実行され続けます。
これは、whileループの間に、使用中のループの差分ことに留意すべきです。

質問2:メソッドの戻り値boolean型のためのライティングのヒント

/**
* 判断一个年份是否为闰年
* @param year 一个int型的年份
* @return true 是闰年 , false 不是闰年
*/
public boolean isLeapYear(int year) {
	return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}

この方法は、それがうるう年であるかどうかを裁判官になり、戻り値はブール値です。他の構造は、式の値が最終的な答えで直接収益を決定するために - まず、その場合は記述する必要はありません、年式の飛躍がブール値自体されているかどうかを判断します。書かれて巧みにそしてシンプルな構造。

質問3:イデオロギー分割の問題を解決

例えば、このような問題:出力パターンなどの環状構造を用います。
* ### ###
## ## *#*
#*#* ###
* ##### *
#*#### *
## *#* ##
### * ###
本一見、複雑なグラフィックルックスは、あなたが部品に問題を解決する必要があり、物事を見つけるように見えます。まず、全体のパターンは菱形上半分と下半分の、夫々 、2つの上部と下部に分割されています。さて、上半分を見て、左と右の小さな部分に分割することができ、小さな部分今の二重ループを使用して、左上隅を見てすることは簡単にそれらの間の対応関係を見つけることができます。そのような分析を行い、最終的に組み合わせ、全体の出力パターンを完成するために残りの3つの小さな部分。

public void printRhombusF(int n) {
	char[][] image = new char[n][n];
	
	for (int i = 0; i < n / 2; i++) {
		for (int j = 0; j < n; j++) {
			if (n / 2 - i == j || n / 2 + i == j) {
				image[i][j] = '*';
			} else {
				image[i][j] = '#';
			}
		}
	}
	for (int i = n / 2; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (i - n / 2 == j || n - (i - n / 2) - 1 == j) {
				image[i][j] = '*';
			} else {
				image[i][j] = '#';
			}
		}
	}
		
	//打印输出二维数组
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			System.out.print(image[i][j]);
		}
		System.out.println();
	}
}

インスピレーションを得た:問題を解決するために、分割方式を活用するために学ぶために、大きな問題は、小さな一連の問題を解決するために、アイデアがより明確になります。

質問4:文書が書かれたコメントの方法に関するものです。

/**
* 对于当前方法的整体解释,方法的分析过程,利害关系
*
* @param argumentName参数名字 对于当前参数的功能解释,提一些要求. 有多少个参数就需要完成多少@param
* @return 返回值解释,数据类型,返回值的含义,状态,要求。
*/

ドキュメンテーションコメントを書くことは、ヘルプのユーザーはコードの理解を向上させ、すべての機能や使用方法、注釈文書を生成することができます。フォーマットに厳密に従って書かれた文書への書き込みノートは、すべてのメソッドは、ドキュメンテーションコメントを記述する必要があります。

問題5:上の問題をパッケージングする方法

カプセル化方法は、良いアプローチは優先課題でカプセル化することができますどのように、特定の規則に従う必要があり、ランダムではありません。

  1. 機能的アプローチは、単一であることを、後で再利用性、移植性やその他の問題と考えられます。
  2. (戻り値メソッドなし)ブラックボックスの書き込みを回避する方法は、この方法は、リターンを減少させるために構造化プログラミングのアイデアを満たすために、コード読取及び回避混乱構造の改善に使用する値を返します。
  3. 、コード最適化された具体的な事例を識別し、運用効率を改善し、コードの可読性を向上させます。

質問6:アルゴリズムの性能を改善するための特別な状況の柔軟な使用、

例:操作、分解出力のための品質係数の正の整数分解。

public static void primeNumber(int num) {
	System.out.print(num + "=");
	//num被i整除后不需要再从2开始除,从当前的i开始除即可
	for (int i = 2; i <= num; i++) {
		if(num % i == 0 && num != i) {
			num /= i;
			System.out.print(i + "*");
			i -= 1; 
		}
		if(num == i) {
			System.out.print(i);
			break;
		}
	}
}

上記のアルゴリズムは、この問題を解決することができましたが、これに基づいてアルゴリズムの効率が高い作り、いくつかの最適化を行うことができます。サイクルI 2からトラバースNUMする必要はありません、そしてサイクルは、私が小さい数学よりまでインクリメントされている場合、私は、割り切れるNUM、numと/ Iを出力したときに、また、過度の判決文を追加する必要はありません最後できる唯一NUM numは、それ自体で割り切れることを示す最大整数.sqrt(NUM)は、その後、ループに冗長判定を行う必要がない場合、NUMの出力電流値は、サイクルの終了直後であってもよいです。コードは以下の通りであります:

public static void primeNumber(int num) {
	System.out.print(num + "=");
	//num被i整除后不需要再从2开始除,从当前的i开始除即可
	for (int i = 2; i < Math.sqrt(num); i++) {
		if(num % i == 0) {
			num /= i;
			System.out.print(i + "*");
			i -= 1; 
		}
	}
	System.out.println(num);
}

毎週の調査の後、この問題の要約を行うだけでなく、少しの友人を助けたいと私は同じ質問があります。小さなパートナーと何か間違ってもそれが指摘されている場合は、あなたに感謝!

リリース元の4件の記事 ウォンの賞賛5 ビュー132

おすすめ

転載: blog.csdn.net/Betterman_QS/article/details/104228792