一条晕的语句

package com.corejava.collec;

import java.util.AbstractQueue;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Queue;

/**
 * @author teddy.lu 06-07-18
 */
public class CircularArrayQueueTest {

 /**
  * @param args
  */
 public static void main(String[] args) {

  Queue<String> q = new CircularArrayQueue<String>(10);
  q.add("Amy");
  q.add("Bob");
  q.add("Carl");
  q.add("Deedee");
  q.add("Emile");

  q.add("Fifi");

  for (Iterator iter = q.iterator(); iter.hasNext();) {
   String element = (String) iter.next();
   System.out.println(element);
  }
  System.out.println("size :" + q.size());

 }

}

class CircularArrayQueue<E> extends AbstractQueue<E> {

 private E[] elements;

 private int head;

 private int tail;

 private int count;

 private int modcount;

 /**
  * constructs an empty queue
  *
  * @param capacity
  */
 public CircularArrayQueue(int capacity) {
  super();
  elements = (E[]) new Object[capacity];
  this.modcount = 0;
  this.count = 0;
  this.head = 0;
  this.tail = 0;
 }

 @Override
 public Iterator<E> iterator() {
  return new QueueIterator();
 }

 @Override
 public int size() {

  return count;
 }

 public boolean offer(E o) {
  assert elements != null;

  // there are still remain space
  if (count < elements.length) {

   elements[tail] = o;
   tail = (tail++) % elements.length;
   count++;
   modcount++;
   return true;
  } else {
   return false;

  }

 }

 public E peek() {
  if (count == 0) {
   return null;
  } else
   return elements[head];
 }

 public E poll() {
  // first judge the elements if empty

  if (count == 0) {
   return null;
  } else {

   E e = elements[head];
   head = (head + 1) % elements.length;
   count--;

   modcount++;
   return e;
  }

 }

 public CircularArrayQueue() {
  super();
 }

 private class QueueIterator implements Iterator<E> {

  private int offset;

  private int modcountAtConstruct;

  public  QueueIterator() {
          System.out.println("modcount is: "+modcount);
   modcountAtConstruct = modcount;
  }

  public boolean hasNext() {

   if (modcount != modcountAtConstruct)
    throw new ConcurrentModificationException();
   return offset < elements.length;
  }

  public E next() {
   if (!hasNext())
    throw new NoSuchElementException();
   E r = elements[(head + offset) % elements.length];
   offset++;
   return r;

  }

  public void remove() {
   throw new UnsupportedOperationException();

  }

 }
}

今天在看core java 7th中关于collection中的内容,在动手运行上面的程序时,发现只保存了最后一个String,结果审阅代码,发现问题竟然出现在   tail = (tail++) % elements.length; 在此记下,以免以后出现同样的错误。 认为这语句其实可以分解成3句来执行(1) tail%elements.length 得 0,(2) tail= tail+1 得 1,(3)再将1的结果赋给tail得0
 

✅ 一、逐个错误修复 ❌ 错误1:Scanner scanner = new scanner(System.in); ❓ 问题原因: Java 是大小写敏感语言,scanner 不是类名,正确类名是 Scanner。 ✅ 正确写法: Java Scanner scanner = new Scanner(System.in); ❌ 错误2:int hj = ki.player(person); ❓ 问题原因: ki.player(person) 调用了一个方法,但 Person 类中没有提供 ui 的获取方式; player(Person p) 方法中试图访问 p.ui,但没有定义 getter 方法或直接访问权限。 ✅ 修复方式: 在 Person 类中添加 getter 方法: 修改 main 方法中创建 Person 对象: Java Person person = new Person(scanner); 修改 player() 方法使用 getter: ❌ 错误3:int com = ki.computer(com, hj); ❓ 问题原因: 变量名重复:你定义了 Com com = new Com();,又定义了 int com; computer() 方法的参数和逻辑混乱。 ✅ 修复方式: 修改变量名为 computer 避免冲突: Java Com computer = new Com(); int result = ki.computer(computer, hj); ❌ 错误4:for (int ui = 0; ui < 3; ui++) ❓ 问题原因: ui 已经在前面被定义为 String 类型,不能重复用于循环变量。 ✅ 修复方式: Java for (int i = 0; i < 3; i++) { ❌ 错误5:else (com < 0) ❓ 问题原因: else 后不能直接加条件; 正确语法是 else if (条件)。 ✅ 修复方式: ❌ 错误6:String ui = scanner.next(); 写在 Person 类中 ❓ 问题原因: 不能直接在类体中写执行语句; scanner 没有定义。 ✅ 修复方式: 放在构造函数中: ❌ 错误7:int intRandom = random.nextInt(3); 写在 Com 类中 ❓ 问题原因: 同样不能直接写在类体中; random 未定义。 ✅ 修复方式: ❌ 错误8:public int computer(COM com, int op) ❓ 问题原因: 类名 COM 不存在,应为 Com; 参数名和变量名冲突; op 没有使用。 ✅ 修复方式: ❌ 错误9:int hj = ki.player(ui); ❓ 问题原因: ki 是对象,不是类; player() 方法参数是 Person 类型,但你传入的是 String。 ✅ 修复方式: 不需要这行,直接在 main 中获取 playerMove: Java int playerMove = logic.player(person); ❌ 错误10:if (Com.intRandom == hj) ❓ 问题原因: Com 是类名,不是对象; 实例变量不能通过类名访问。 ✅ 修复方式: 使用对象调用: Java int comMove = computer.getIntRandom();每一条错误的本质原因以及它通俗易懂的定义理解
09-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值