//我做了一个测试类,你运行一下试试吧
成都创新互联从2013年创立,先为义乌等服务建站,义乌等地企业,进行企业商务咨询服务。为义乌企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
//问题的关键在于这个类的设计似乎是,假设size是3,但是数组的size是4
//putloc是0,但是put的位置在数组中是1
//总觉得这个类的设计很怪,既然size是3,底层实现也做成3就好了。
import java.util.Arrays;
public class CircularQueue {
private char q[];
private int putloc, getloc;
public static void main(String[] args) {
CircularQueue circularQueue = new CircularQueue(3);
circularQueue.put('1');
circularQueue.put('1');
circularQueue.put('1');
circularQueue.put('1');
}
private void paint(String s) {
System.out.println(s + ": putloc=" + putloc + " getloc=" + getloc + " "
+ Arrays.toString(q));
}
public CircularQueue(int size) {
q = new char[size + 1];// 注意:这里数组长度加 1。
putloc = getloc = 0;
paint("create!");
System.out.println();
}
public void put(char ch) {
paint("before put");
if (putloc + 1 == getloc | ((putloc == q.length - 1) (getloc == 0))) { // 第一个边界条件想不清楚,为什么putloc+1==getloc
System.out.println("--Queue is full.");
return;
}
putloc++;
if (putloc == q.length)
putloc = 0;
q[putloc] = ch;
paint("after put");
System.out.println();
}
public char get() {
paint("before get");
if (getloc == putloc) {
System.out.println("--Queue is empty.");
return (char) 0;
}
getloc++;
if (getloc == q.length)
getloc = 0;
paint("after get");
System.out.println();
return q[getloc];
}
}
buf3这个数组你自己定义的长度是1024啊: byte[] buf3 = new byte[1024];
因为你定义了一个1024长度的byte数组,然后再将Hello world!放进去这个数组,但没有放满, 后面全是空的, 所以你再将后面空的byte转成String的时候,就出现乱码.
代码:
package com.ufotable.test;
public class Test30 {
private static int l,r,u,d;//定义上下左右边界
private static int[][] a=new int[0][0];//数组
private static int y=0,x=0;//初始化坐标
private static int step,temp;//步长,上一个数组的值
private static void add(int y,int x){
temp+=step;a[y][x]=temp;
}
private static void left(){
while(xl)add(y, --x);//未遇到左边界
if(yu){//遇到左边界且未遇到上边界
l++;up();
}
}
private static void right(){
while(xr)add(y, ++x);//未遇到右边界
if(yd){//遇到右边界且未遇到下边界
r--;
down();
}
}
private static void up(){
while(yu)add(--y, x);//未遇到上边界
if(xr){//遇到上边界且未遇到右边界
u++;
right();
}
}
private static void down(){
while(yd)add(++y, x);//未遇到下边界
if(xl){//遇到下边界且未遇到左边界
d--;
left();
}
}
private static void fun(int start,int step,int length){//产生数组(起始值,步长,矩阵边长)
Test30.step=step;
l=u=0;r=d=length-1;
a=new int[length][length];
a[0][0]=temp=start;
up();
}
public static void print(){//输出矩阵
for(int i=0;ia.length;i++){
for(int j=0;ja.length;j++){
System.out.print(a[i][j]+"\t");
}System.out.println();}
}
public static void main(String[] args) {
fun(0,1,10);//测试
print();
}
}
输出结果:
你这个x,y是在方法内部定义的一个变量 没有赋值就使用当然编译不通过咯
要想使用必须要先实例化。、
代码具体要怎么写 要看你的业务逻辑!