十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
首先,你的代码有两处错,main函数定义需要 static关键字,
在亭湖等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站建设、成都做网站 网站设计制作按需求定制设计,公司网站建设,企业网站建设,成都品牌网站建设,营销型网站建设,成都外贸网站建设,亭湖网站建设费用合理。
第二是定义数组容量,只需要在new对象的时候设置容量大小,
在你的代码中,目标是取平均值,这里其实不需要定义数组,显得多此一举,您可以自行去掉,下面是你的代码的注释,请采纳!
import java.util.Scanner;
public class Test {
// public void main(String[] args) {
// double[5] cj = new double[5];
//创建主函数
public static void main(String[] args) {
//定义double数组,容量5
double[] cj = new double[5];
//定义扫描键盘输入
Scanner sc = new Scanner(System.in);
int i;
//平均数变量
double avg = 0.0d;
//for循环,变量i从0开始没循环一次i+1,当不满足条件i5时跳出循环
for (i = 0; i 5; i++){
System.out.println("请输入第" + (i + 1) + "个数");
//键盘输入小数并赋值到double数组中
cj[i] = sc.nextDouble();
//将所有输入的数值相加
avg = avg + cj[i];
}
//取平均数
avg = avg / 5;
System.out.println("平均分为:" + avg);
}
}
package org.baoquan.example;
public class TestException { // 类的定义
public TestException() { //无参数构造方法
}
boolean testEx() throws Exception{ //定义一个方法testEx,该方法声明抛出一个Exception异常
boolean ret = true; //定义一个布尔类型的变量,并赋值为true(真)
//这是try块的开始,说明该方法内可能会有异常发生,所以对于可能有异常发生的地方,如果用户想对该异常进行处理,就用try catch来包裹他
try{
ret = testEx1(); //这个地方就是异常可能发生的地方,在方法testEx中,我们调用了testEx1方法,这个方法可能会发生异常。所以我们要来对发生异常的时候系统如果处理这个异常来做一个说明。
}catch (Exception e){//catch语句只有发生异常的时候才有可能调用。所以如果系统没有发生异常,catch中的代码是永远无法运行的。
System.out.println("testEx, catch exception"); //当系统发生异常的时候,打印"testEx, catch exception"这句,并把ret赋值为false。并抛出该异常。这个异常就有调用这个方法的方法来处理。
ret = false;
throw e;
}finally{ //finally,是不管有无异常的发生,都会运行其中的代码。所以这其中多是处理系统资源回收的代码。
System.out.println("testEx, finally; return value="+ret);
return ret;
}
}
/**
* 一下的都是相同道理
* @return 该方法返回布尔类型
* @throws Exception
*/
boolean testEx1() throws Exception{
boolean ret = true; //定义一个变量ret,默认为true。
try{
ret = testEx2();
if (!ret){
return false;
}
System.out.println("testEx1, at the end of try");
return ret;
}catch (Exception e){
System.out.println("testEx1, catch exception");
ret = false;
throw e;
}
finally{
System.out.println("testEx1, finally; return value="+ret);
return ret;
}
}
boolean testEx2() throws Exception{
boolean ret = true;
try{
int b=12;
int c;
for (int i=2;i=-2;i--){
c=b/i;
System.out.println("i="+i);
}
return true;
}catch (Exception e){
System.out.println("testEx2, catch exception");
ret = false;
throw e;
}
finally{
System.out.println("testEx2, finally; return value="+ret);
return ret;
}
}
public static void main(String[] args) {
TestException testException1 = new TestException();
try{
testException1.testEx();
}catch(Exception e){
e.printStackTrace();
}
}
}
这个是给你看的注释版:
import java.util.LinkedList;
import java.util.Scanner;
public class Test6 {
int[][] array;
int m = 0, n = 0;
LinkedListString quere = new LinkedListString();
public Test6() {
quere.add("r");
quere.add("d");
quere.add("l");
quere.add("u");
}//定义了一个List里面装了["u","l","d","r"]四个String类型的东西
//从后面的应用来,"u"代表的是up,这个程序做的是根据给定数字X,构建
//出一个一维二维长均为X的数组,数组中以顺时针的方式用数字1到X*X进行填充
//可以想象成蛇行的往里面盘绕.
//这里的"u"也就是从下往上填充的意思了,其他的就不用我说了吧,"l"=left,"d"=down,"r"=right
public void printTest6(int N) {
array = new int[N][N];
for (int i = 1; i = N * N; i++) {
array[m][n] = i;
indexControl(quere, N);
}//数组赋值执行完毕
//接下来打印出数组
for (int i = 0; i N; i++) { //N 行
for (int j = 0; j N; j++) { //N 列
System.out.print(array[i][j] + "\t");//输出二维数组 "\t"是一个tab键符号
}
//每打完一组二维的数据,加换行
System.out.println();//换行
System.out.println();//换行
}
}
private void indexControl(LinkedListString quere, int N) {
String method = quere.peek();
//调用peek()返回链表的头部节点,对于初始状态["u","l","d","r"]来说,返回的是"r"
if (method.equals("r")) {
//如果头部节点是"r",换句话说具体填充的时候就是从左往右先开始填充.
//这时候的填充操作,对于二维数组来说自然就是固定第一维不变,第二维递增了.
n++;//固定第一维不变,第二维做递增操作
if ((n == N - 1) || array[m][n + 1] != 0) {
//这种操作的停止条件是走到了数组的边缘,也就是n == N - 1,因为n是从0开始发番
//另一种终止条件就是找到了一个已经被赋值过了的位置.
quere.add(quere.poll());
//条件终止之后就应该换方向了.调用poll方法获得头节点,初始状态就是"r",
//然后poll方法还会把"r"从原始链表中删除,因此调用完poll之后原始链表应该变成了
//["u","l","d"],然后在调用add方法,把"r"追加到尾部,此时链表就变成["r","u","l","d"]
//下一步再取头就是"d"了,也就是开始往下走.
}
} else if (method.equals("d")) {
//这里,如果头节点是"d",也就是从上往下开始赋值了,
//这时候应该是保持第二维坐标不变,第一维坐标递增.
m++;//固定第二维不变,第一维做递增操作
if ((m == N - 1) || array[m + 1][n] != 0) {
//这种操作的停止条件是走到了数组的边缘,也就是m == N - 1,因为m是从0开始发番
//另一种终止条件就是找到了一个已经被赋值过了的位置.
quere.add(quere.poll());
//条件终止开始换方向,把"d"放在链表的尾部,"l"成了头
}
} else if (method.equals("l")) {
//这里,如果头节点是"l",也就是从右往左开始赋值了,
//这时候应该是保持第一维坐标不变,第二维坐标递减.
n--;//固定第一维不变,第二维做递减操
if ((n == 0) || array[m][n - 1] != 0) {
//这种操作的停止条件是走到了数组的边缘,也就是n == 0.
//另一种终止条件就是找到了一个已经被赋值过了的位置.
quere.add(quere.poll());
//条件终止开始换方向,把"l"放在链表的尾部,"u"成了头
}
} else {
//这里,如果头节点是"u",也就是从下往上开始赋值了,
//这时候应该是保持第二维坐标不变,第一维坐标递减.
m--;//固定第二维不变,第一维做递减操
if (array[m - 1][n] != 0) {
//终止条件就是找到了一个已经被赋值过了的位置.这里不把数组边界作为判断条件是因为,
//可以保证在执行到这个部分的时候,数组的上部边界已经全部有值.
quere.add(quere.poll());
//条件终止开始换方向,把"u"放在链表的尾部,"r"成了头
}
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);//将输入流交给scan对象
System.out.println("请输入矩形的大小:");
int num = scan.nextInt();//scan对象获得从控制台输入的东西
new Test6().printTest6(num);//根据输入的数值构建数组
}
}
另外,程序不够严密,有障害,输入不是大于1的正整数就会挂,下面是修正版:
package Date0906.Date0906_Test6;
import java.util.LinkedList;
import java.util.Scanner;
public class Test6_Up {
int[][] array;
int m = 0, n = 0;
LinkedListString quere = new LinkedListString();
public Test6_Up() {
quere.add("r");
quere.add("d");
quere.add("l");
quere.add("u");
}
public void printTest6(int N) {
array = new int[N][N];
for (int i = 1; i = N * N; i++) {
array[m][n] = i;
indexControl(quere, N);
}
for (int i = 0; i N; i++) { //N 行
for (int j = 0; j N; j++) { //N 列
System.out.print(array[i][j] + "\t");//输出二维数组
}
System.out.println();//换行
System.out.println();//换行
}
}
private void indexControl(LinkedListString quere, int N) {
String method = quere.peek();
if (method.equals("r")) {//从左往右写二维数组
n++;
if ((n == N - 1) || ( N !=1 array[m][n + 1] != 0 )) {
//如果N为1或者检索到边界,或者检索到已经被赋值的点,重置链表,换赋值方向
quere.add(quere.poll());
}
} else if (method.equals("d")) {//从上往下写二维数组
m++;
if ((m == N - 1) || ( N !=1 array[m + 1][n] != 0 )) {
//如果N为1或者检索到边界,或者检索到已经被赋值的点,重置链表,换赋值方向
quere.add(quere.poll());
}
} else if (method.equals("l")) {//从右往左写二维数组
n--;
if ((n == 0) || ( N !=1 array[m][n - 1] != 0 )) {
//如果N为1或者检索到边界,或者检索到已经被赋值的点,重置链表,换赋值方向
quere.add(quere.poll());
}
} else {//从下往上写二维数组
m--;
if (N !=1 array[m - 1][n] != 0) {
//如果N为1或者检索到已经被赋值的点,重置链表,换赋值方向
quere.add(quere.poll());
}
}
}
public static void main(String[] args) {
Scanner scan = null;
System.out.println("请输入矩形的大小:");
int num = 0;
while ( true ) {
scan = new Scanner(System.in);
//用try捕获异常,当输整数以外的内容时给提示和再次输入的机会.
try {
num = scan.nextInt();
} catch (Exception e) {
System.out.println("请输入正整数");
continue;
}
//如果发现输入的数字是非正数,则要求再次输入
if ( 0 = num ) {
System.out.println("请输入正整数");
continue;
}
break;
}
new Test6_Up().printTest6(num);
}
}