<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/feed.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
  <title>codeandIA</title>
  <description>Blog personal de un estudiante de DAW: lo que pruebo y lo que me pasa.</description>
  <link>https://codeandia.com/</link>
  <atom:link href="https://codeandia.com/feed.xml" rel="self" type="application/rss+xml" />
  <language>es-ES</language>
  <copyright>© 2026 codeandIA</copyright>
  <managingEditor>ivan@codeandia.com (Iván)</managingEditor>
  <webMaster>ivan@codeandia.com (Iván)</webMaster>
  <image>
    <url>https://codeandia.com/og-image.png</url>
    <title>codeandIA</title>
    <link>https://codeandia.com/</link>
  </image>
  <lastBuildDate>Sat, 24 Oct 2026 23:37:42 +0000</lastBuildDate>
  
  
  
  
  <item>
    <title>Ejercicios Java para principiantes: 8 prácticas con soluciones</title>
    <description>Ocho ejercicios de Java para principiantes con su solución explicada: del Scanner a dos clases que se relacionan. Un regalo para facilitar tu estudio.</description>
    <link>https://codeandia.com/articulos/guias/ejercicios-java-basicos-daw/</link>
    <guid>https://codeandia.com/articulos/guias/ejercicios-java-basicos-daw/</guid>
    <pubDate>Fri, 23 Oct 2026 00:00:00 +0000</pubDate>
    <category>Guía</category>
    <dc:creator>Iván</dc:creator>
    <content:encoded><![CDATA[<h2 id="un-regalo-para-que-practiques-java-sin-complicaciones">Un regalo para que practiques Java sin complicaciones</h2>

<p>Estudio primero de DAW, el ciclo de FP de desarrollo de aplicaciones web en España, y Java es mi primera asignatura de programación. Si algo he aprendido con mi primer examen es que Java no se aprende leyendo, se aprende escribiendo código. Yo empecé tarde por pereza y me costó más de lo necesario. Cómo uso la IA para estudiar sin que me lo haga todo lo cuento en <a href="https://codeandia.com/articulos/guias/aprender-java-con-ia-daw/">cómo aprendo Java con IA</a>.</p>

<p>Lo que más me costó al principio fue la sintaxis del <code class="language-plaintext highlighter-rouge">Scanner</code>: me liaba con <code class="language-plaintext highlighter-rouge">nextInt()</code>, <code class="language-plaintext highlighter-rouge">nextLine()</code> y compañía, y casi siempre los ponía mal. Después se me atascaron los ejercicios en los que un objeto depende de otro, porque no conseguía entender cómo se relacionaban. Cuando lo ves, todo se vuelve mucho más sencillo.</p>

<p>Por eso te dejo <strong>8 ejercicios de Java básicos</strong> con su solución. Empiezan por el <code class="language-plaintext highlighter-rouge">Scanner</code> y acaban con dos clases que se relacionan, que es justo donde yo me atascaba. Cada uno lleva su enunciado, el código completo y una explicación de lo que hace. Los he preparado con ayuda de una IA y no son los del profesor. Cópialos, pruébalos en Eclipse (o en el IDE que uses) y modifícalos a tu gusto. Si al cambiarlos te sale un error que no entiendes, pégalo en el <a href="https://codeandia.com/herramientas/corrector-java/">corrector de Java</a> que he montado: te explica qué falla y te devuelve el código corregido.</p>

<p>Los ofrezco como regalo para facilitarte el estudio. No necesitas registrarte ni dar ningún dato.</p>

<hr />

<h3 id="ejercicio-1-datos-del-alumno">Ejercicio 1: Datos del alumno</h3>

<p><strong>Enunciado:</strong> Crea un programa que pida por teclado el nombre del alumno, su edad y la nota de un examen, y los muestre por pantalla.</p>

<p><strong>Código:</strong></p>

<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">java.util.Scanner</span><span class="o">;</span>

<span class="kd">public</span> <span class="kd">class</span> <span class="nc">DatosAlumno</span> <span class="o">{</span>
    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="nc">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
        <span class="nc">Scanner</span> <span class="n">sc</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Scanner</span><span class="o">(</span><span class="nc">System</span><span class="o">.</span><span class="na">in</span><span class="o">);</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"Nombre del alumno: "</span><span class="o">);</span>
        <span class="nc">String</span> <span class="n">nombre</span> <span class="o">=</span> <span class="n">sc</span><span class="o">.</span><span class="na">nextLine</span><span class="o">();</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"Edad: "</span><span class="o">);</span>
        <span class="kt">int</span> <span class="n">edad</span> <span class="o">=</span> <span class="n">sc</span><span class="o">.</span><span class="na">nextInt</span><span class="o">();</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"Nota del examen: "</span><span class="o">);</span>
        <span class="kt">double</span> <span class="n">nota</span> <span class="o">=</span> <span class="n">sc</span><span class="o">.</span><span class="na">nextDouble</span><span class="o">();</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"\n--- Datos del alumno ---"</span><span class="o">);</span>
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Nombre: "</span> <span class="o">+</span> <span class="n">nombre</span><span class="o">);</span>
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Edad: "</span> <span class="o">+</span> <span class="n">edad</span><span class="o">);</span>
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Nota: "</span> <span class="o">+</span> <span class="n">nota</span><span class="o">);</span>
        
        <span class="n">sc</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
    <span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>

<p><strong>Qué hace:</strong> Usa <code class="language-plaintext highlighter-rouge">Scanner</code> para leer datos por teclado, guarda los valores en variables y los imprime con <code class="language-plaintext highlighter-rouge">System.out.println</code>.</p>

<hr />

<h3 id="ejercicio-2-calculadora-simple">Ejercicio 2: Calculadora simple</h3>

<p><strong>Enunciado:</strong> Pide dos números por teclado y muestra la suma, resta, multiplicación y división.</p>

<p><strong>Código:</strong></p>

<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">java.util.Scanner</span><span class="o">;</span>

<span class="kd">public</span> <span class="kd">class</span> <span class="nc">CalculadoraSimple</span> <span class="o">{</span>
    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="nc">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
        <span class="nc">Scanner</span> <span class="n">sc</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Scanner</span><span class="o">(</span><span class="nc">System</span><span class="o">.</span><span class="na">in</span><span class="o">);</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"Primer número: "</span><span class="o">);</span>
        <span class="kt">double</span> <span class="n">a</span> <span class="o">=</span> <span class="n">sc</span><span class="o">.</span><span class="na">nextDouble</span><span class="o">();</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"Segundo número: "</span><span class="o">);</span>
        <span class="kt">double</span> <span class="n">b</span> <span class="o">=</span> <span class="n">sc</span><span class="o">.</span><span class="na">nextDouble</span><span class="o">();</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Suma: "</span> <span class="o">+</span> <span class="o">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">b</span><span class="o">));</span>
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Resta: "</span> <span class="o">+</span> <span class="o">(</span><span class="n">a</span> <span class="o">-</span> <span class="n">b</span><span class="o">));</span>
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Multiplicación: "</span> <span class="o">+</span> <span class="o">(</span><span class="n">a</span> <span class="o">*</span> <span class="n">b</span><span class="o">));</span>
        
        <span class="k">if</span> <span class="o">(</span><span class="n">b</span> <span class="o">!=</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
            <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"División: "</span> <span class="o">+</span> <span class="o">(</span><span class="n">a</span> <span class="o">/</span> <span class="n">b</span><span class="o">));</span>
        <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
            <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"División: no se puede dividir entre cero"</span><span class="o">);</span>
        <span class="o">}</span>
        
        <span class="n">sc</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
    <span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>

<p><strong>Qué hace:</strong> Realiza las cuatro operaciones básicas y comprueba que el divisor no sea cero antes de dividir.</p>

<hr />

<h3 id="ejercicio-3-par-o-impar">Ejercicio 3: ¿Par o impar?</h3>

<p><strong>Enunciado:</strong> Pide un número entero y di si es par o impar.</p>

<p><strong>Código:</strong></p>

<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">java.util.Scanner</span><span class="o">;</span>

<span class="kd">public</span> <span class="kd">class</span> <span class="nc">ParOImpar</span> <span class="o">{</span>
    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="nc">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
        <span class="nc">Scanner</span> <span class="n">sc</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Scanner</span><span class="o">(</span><span class="nc">System</span><span class="o">.</span><span class="na">in</span><span class="o">);</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"Introduce un número entero: "</span><span class="o">);</span>
        <span class="kt">int</span> <span class="n">numero</span> <span class="o">=</span> <span class="n">sc</span><span class="o">.</span><span class="na">nextInt</span><span class="o">();</span>
        
        <span class="k">if</span> <span class="o">(</span><span class="n">numero</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
            <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Es par"</span><span class="o">);</span>
        <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
            <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Es impar"</span><span class="o">);</span>
        <span class="o">}</span>
        
        <span class="n">sc</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
    <span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>

<p><strong>Qué hace:</strong> Usa el operador módulo <code class="language-plaintext highlighter-rouge">%</code> para saber si el resto de dividir entre 2 es cero.</p>

<hr />

<h3 id="ejercicio-4-números-del-1-al-10">Ejercicio 4: Números del 1 al 10</h3>

<p><strong>Enunciado:</strong> Muestra por pantalla los números del 1 al 10, uno por línea.</p>

<p><strong>Código:</strong></p>

<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Numeros1al10</span> <span class="o">{</span>
    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="nc">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;=</span> <span class="mi">10</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
            <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">i</span><span class="o">);</span>
        <span class="o">}</span>
    <span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>

<p><strong>Qué hace:</strong> Un bucle <code class="language-plaintext highlighter-rouge">for</code> que comienza en 1 y termina cuando <code class="language-plaintext highlighter-rouge">i</code> llega a 10.</p>

<hr />

<h3 id="ejercicio-5-tabla-de-multiplicar">Ejercicio 5: Tabla de multiplicar</h3>

<p><strong>Enunciado:</strong> Pide un número por teclado y muestra su tabla de multiplicar del 1 al 10.</p>

<p><strong>Código:</strong></p>

<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">java.util.Scanner</span><span class="o">;</span>

<span class="kd">public</span> <span class="kd">class</span> <span class="nc">TablaMultiplicar</span> <span class="o">{</span>
    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="nc">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
        <span class="nc">Scanner</span> <span class="n">sc</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Scanner</span><span class="o">(</span><span class="nc">System</span><span class="o">.</span><span class="na">in</span><span class="o">);</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"¿Tabla de qué número quieres ver? "</span><span class="o">);</span>
        <span class="kt">int</span> <span class="n">n</span> <span class="o">=</span> <span class="n">sc</span><span class="o">.</span><span class="na">nextInt</span><span class="o">();</span>
        
        <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;=</span> <span class="mi">10</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
            <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">n</span> <span class="o">+</span> <span class="s">" x "</span> <span class="o">+</span> <span class="n">i</span> <span class="o">+</span> <span class="s">" = "</span> <span class="o">+</span> <span class="o">(</span><span class="n">n</span> <span class="o">*</span> <span class="n">i</span><span class="o">));</span>
        <span class="o">}</span>
        
        <span class="n">sc</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
    <span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>

<p><strong>Qué hace:</strong> Combina un bucle <code class="language-plaintext highlighter-rouge">for</code> con la entrada de datos por teclado.</p>

<hr />

<h3 id="ejercicio-6-nota-media-y-aprobado">Ejercicio 6: Nota media y aprobado</h3>

<p><strong>Enunciado:</strong> Pide las notas de tres exámenes, calcula la media y di si el alumno ha aprobado (media igual o superior a 5).</p>

<p><strong>Código:</strong></p>

<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">java.util.Scanner</span><span class="o">;</span>

<span class="kd">public</span> <span class="kd">class</span> <span class="nc">NotaMedia</span> <span class="o">{</span>
    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="nc">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
        <span class="nc">Scanner</span> <span class="n">sc</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Scanner</span><span class="o">(</span><span class="nc">System</span><span class="o">.</span><span class="na">in</span><span class="o">);</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"Nota del primer examen: "</span><span class="o">);</span>
        <span class="kt">double</span> <span class="n">n1</span> <span class="o">=</span> <span class="n">sc</span><span class="o">.</span><span class="na">nextDouble</span><span class="o">();</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"Nota del segundo examen: "</span><span class="o">);</span>
        <span class="kt">double</span> <span class="n">n2</span> <span class="o">=</span> <span class="n">sc</span><span class="o">.</span><span class="na">nextDouble</span><span class="o">();</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"Nota del tercer examen: "</span><span class="o">);</span>
        <span class="kt">double</span> <span class="n">n3</span> <span class="o">=</span> <span class="n">sc</span><span class="o">.</span><span class="na">nextDouble</span><span class="o">();</span>
        
        <span class="kt">double</span> <span class="n">media</span> <span class="o">=</span> <span class="o">(</span><span class="n">n1</span> <span class="o">+</span> <span class="n">n2</span> <span class="o">+</span> <span class="n">n3</span><span class="o">)</span> <span class="o">/</span> <span class="mi">3</span><span class="o">;</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Nota media: "</span> <span class="o">+</span> <span class="n">media</span><span class="o">);</span>
        
        <span class="k">if</span> <span class="o">(</span><span class="n">media</span> <span class="o">&gt;=</span> <span class="mi">5</span><span class="o">)</span> <span class="o">{</span>
            <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Has aprobado"</span><span class="o">);</span>
        <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
            <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Has suspendido"</span><span class="o">);</span>
        <span class="o">}</span>
        
        <span class="n">sc</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
    <span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>

<p><strong>Qué hace:</strong> Calcula la media aritmética y usa un condicional para decidir si se aprueba.</p>

<hr />

<h3 id="ejercicio-7-contar-vocales">Ejercicio 7: Contar vocales</h3>

<p><strong>Enunciado:</strong> Pide una palabra por teclado y cuenta cuántas vocales tiene.</p>

<p><strong>Código:</strong></p>

<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">java.util.Scanner</span><span class="o">;</span>

<span class="kd">public</span> <span class="kd">class</span> <span class="nc">ContarVocales</span> <span class="o">{</span>
    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="nc">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
        <span class="nc">Scanner</span> <span class="n">sc</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Scanner</span><span class="o">(</span><span class="nc">System</span><span class="o">.</span><span class="na">in</span><span class="o">);</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"Escribe una palabra: "</span><span class="o">);</span>
        <span class="nc">String</span> <span class="n">palabra</span> <span class="o">=</span> <span class="n">sc</span><span class="o">.</span><span class="na">nextLine</span><span class="o">().</span><span class="na">toLowerCase</span><span class="o">();</span>
        
        <span class="kt">int</span> <span class="n">contador</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span>
        
        <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">palabra</span><span class="o">.</span><span class="na">length</span><span class="o">();</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
            <span class="kt">char</span> <span class="n">letra</span> <span class="o">=</span> <span class="n">palabra</span><span class="o">.</span><span class="na">charAt</span><span class="o">(</span><span class="n">i</span><span class="o">);</span>
            <span class="k">if</span> <span class="o">(</span><span class="n">letra</span> <span class="o">==</span> <span class="sc">'a'</span> <span class="o">||</span> <span class="n">letra</span> <span class="o">==</span> <span class="sc">'e'</span> <span class="o">||</span> <span class="n">letra</span> <span class="o">==</span> <span class="sc">'i'</span> <span class="o">||</span> <span class="n">letra</span> <span class="o">==</span> <span class="sc">'o'</span> <span class="o">||</span> <span class="n">letra</span> <span class="o">==</span> <span class="sc">'u'</span><span class="o">)</span> <span class="o">{</span>
                <span class="n">contador</span><span class="o">++;</span>
            <span class="o">}</span>
        <span class="o">}</span>
        
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"La palabra tiene "</span> <span class="o">+</span> <span class="n">contador</span> <span class="o">+</span> <span class="s">" vocales"</span><span class="o">);</span>
        
        <span class="n">sc</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
    <span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>

<p><strong>Qué hace:</strong> Recorre la palabra letra a letra con un bucle y cuenta cuántas son vocales.</p>

<hr />

<h3 id="ejercicio-8-un-libro-y-su-autor">Ejercicio 8: Un libro y su autor</h3>

<p><strong>Enunciado:</strong> Crea una clase <code class="language-plaintext highlighter-rouge">Autor</code> con nombre y país, y una clase <code class="language-plaintext highlighter-rouge">Libro</code> con título y un autor. Desde un <code class="language-plaintext highlighter-rouge">main</code>, crea un autor, crea un libro que lo use y muestra por pantalla los datos del libro junto con los de su autor. Cada clase va en su propio archivo.</p>

<p><strong>Código (<code class="language-plaintext highlighter-rouge">Autor.java</code>):</strong></p>

<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Autor</span> <span class="o">{</span>
    <span class="nc">String</span> <span class="n">nombre</span><span class="o">;</span>
    <span class="nc">String</span> <span class="n">pais</span><span class="o">;</span>

    <span class="kd">public</span> <span class="nf">Autor</span><span class="o">(</span><span class="nc">String</span> <span class="n">nombre</span><span class="o">,</span> <span class="nc">String</span> <span class="n">pais</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">this</span><span class="o">.</span><span class="na">nombre</span> <span class="o">=</span> <span class="n">nombre</span><span class="o">;</span>
        <span class="k">this</span><span class="o">.</span><span class="na">pais</span> <span class="o">=</span> <span class="n">pais</span><span class="o">;</span>
    <span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>

<p><strong>Código (<code class="language-plaintext highlighter-rouge">Libro.java</code>):</strong></p>

<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Libro</span> <span class="o">{</span>
    <span class="nc">String</span> <span class="n">titulo</span><span class="o">;</span>
    <span class="nc">Autor</span> <span class="n">autor</span><span class="o">;</span>

    <span class="kd">public</span> <span class="nf">Libro</span><span class="o">(</span><span class="nc">String</span> <span class="n">titulo</span><span class="o">,</span> <span class="nc">Autor</span> <span class="n">autor</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">this</span><span class="o">.</span><span class="na">titulo</span> <span class="o">=</span> <span class="n">titulo</span><span class="o">;</span>
        <span class="k">this</span><span class="o">.</span><span class="na">autor</span> <span class="o">=</span> <span class="n">autor</span><span class="o">;</span>
    <span class="o">}</span>

    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">mostrar</span><span class="o">()</span> <span class="o">{</span>
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">titulo</span> <span class="o">+</span> <span class="s">" - "</span> <span class="o">+</span> <span class="n">autor</span><span class="o">.</span><span class="na">nombre</span> <span class="o">+</span> <span class="s">" ("</span> <span class="o">+</span> <span class="n">autor</span><span class="o">.</span><span class="na">pais</span> <span class="o">+</span> <span class="s">")"</span><span class="o">);</span>
    <span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>

<p><strong>Código (<code class="language-plaintext highlighter-rouge">Biblioteca.java</code>):</strong></p>

<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Biblioteca</span> <span class="o">{</span>
    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="nc">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
        <span class="nc">Autor</span> <span class="n">cervantes</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Autor</span><span class="o">(</span><span class="s">"Miguel de Cervantes"</span><span class="o">,</span> <span class="s">"España"</span><span class="o">);</span>
        <span class="nc">Libro</span> <span class="n">quijote</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Libro</span><span class="o">(</span><span class="s">"Don Quijote de la Mancha"</span><span class="o">,</span> <span class="n">cervantes</span><span class="o">);</span>

        <span class="n">quijote</span><span class="o">.</span><span class="na">mostrar</span><span class="o">();</span>
    <span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>

<p><strong>Qué hace:</strong> El <code class="language-plaintext highlighter-rouge">Libro</code> guarda dentro un objeto <code class="language-plaintext highlighter-rouge">Autor</code>. Primero se crea el autor y después se le pasa al libro al construirlo. Desde el libro llegas a los datos del autor con <code class="language-plaintext highlighter-rouge">autor.nombre</code>. Esta idea de un objeto que contiene a otro es lo que a mí me costaba ver al principio.</p>

<hr />

<h2 id="dónde-me-atascaba-yo">Dónde me atascaba yo</h2>

<ul>
  <li><strong><code class="language-plaintext highlighter-rouge">nextInt()</code> y <code class="language-plaintext highlighter-rouge">nextLine()</code> juntos.</strong> Es lo que más me fastidió con el <code class="language-plaintext highlighter-rouge">Scanner</code>. Si lees un número con <code class="language-plaintext highlighter-rouge">nextInt()</code> y justo después pides texto con <code class="language-plaintext highlighter-rouge">nextLine()</code>, el programa parece saltarse la pregunta: el número se lee, pero el salto de línea que escribiste al pulsar Intro se queda pendiente y <code class="language-plaintext highlighter-rouge">nextLine()</code> lo toma como una línea vacía. En el ejercicio 1 lo evito leyendo primero el texto, y si te hace falta el orden contrario, puedes poner un <code class="language-plaintext highlighter-rouge">sc.nextLine();</code> suelto después del número para limpiar ese salto de línea.</li>
  <li><strong>Objetos que dependen de otros.</strong> Me atascaba porque no conseguía entender cómo se relacionaban. Lo que te puedo decir es que, una vez que lo ves, se hace muchísimo más sencillo. Si te pasa lo mismo, fíjate en el ejercicio 8: el autor tiene que existir antes de crear el libro, porque el libro lo recibe al construirse.</li>
</ul>

<h2 id="lo-que-haría-diferente">Lo que haría diferente</h2>

<p>Si pudiera volver atrás, empezaría a hacer ejercicios desde el primer día del curso, no solo cuando se acerca el examen. Con Java, como con casi todo en programación, lo importante no es memorizar sino practicar. Cuanto antes empieces a escribir código tú mismo, menos te costará el examen.</p>

<p>Si te sirven estos ejercicios o quieres contarme cómo te va con ellos, puedes escribirme a ivan@codeandia.com.</p>
]]></content:encoded>
  </item>
  
  <item>
    <title>Cómo estudio para exámenes de programación con IA sin copiar código</title>
    <description>Cómo preparo exámenes de programación (bases de datos, XML, Java) con Claude: ejercicios del profesor, su código y la rúbrica, sin copiar.</description>
    <link>https://codeandia.com/articulos/guias/estudiar-daw-con-ia-sin-copiar-codigo/</link>
    <guid>https://codeandia.com/articulos/guias/estudiar-daw-con-ia-sin-copiar-codigo/</guid>
    <pubDate>Thu, 22 Oct 2026 00:00:00 +0000</pubDate>
    <category>Guía</category>
    <dc:creator>Iván</dc:creator>
    <content:encoded><![CDATA[<h2 id="una-semana-de-exámenes-aprendiendo-a-programar">Una semana de exámenes aprendiendo a programar</h2>

<p>Estudio primero de DAW, el ciclo de FP de desarrollo de aplicaciones web en España. Esta semana ha sido de exámenes. Tocó Bases de datos: tuvimos que hacer un diagrama de entidad-relación siguiendo un enunciado, con las cardinalidades y todo eso que al principio cuesta ver. También hubo Lenguajes de marcas: un test rápido de XML y tres ejercicios bastante sencillos. Y después llegó el primero de programación, que es Java, con sus nervios porque no sabía cómo saldría.</p>

<p>Durante el examen pasé por varios problemas, pero creo que lo saqué bastante bien. Todavía no tengo la nota oficial. Le pasé a Claude el enunciado, la rúbrica que va a usar el profesor y los archivos Java que hice, y me estima entre un 7 y un 8. Es solo una estimación de una IA, no una nota: ya te contaré la real.</p>

<h2 id="el-método-pasarle-a-claude-los-ejercicios-del-profesor-con-su-código">El método: pasarle a Claude los ejercicios del profesor con su código</h2>

<p>En clase no siempre sale todo claro. A veces da pereza, las clases son largas y es fácil distraerse, así que muchas veces prefiero dejarlo para casa y atacarlo allí con calma.</p>

<p>Lo que hago es pasarle a Claude los ejercicios que hemos hecho en clase, contarle cómo los hace el profesor y cómo quiere que los hagamos nosotros, y a partir de ahí pedirle más ejercicios, correcciones y explicaciones. En la práctica es como tener un profesor de programación cuando te pones: le explico cómo trabaja el mío en clase y me prepara ejercicios al mismo estilo, ajustados a lo que estoy viendo.</p>

<p>En el examen de XML, por ejemplo, el primer ejercicio era corregir errores de sintaxis de un archivo XML ya creado. Luego había dos ejercicios de crear XML de 0 a partir de un enunciado. Con Claude me fue bastante bien con todo.</p>

<p>Además, le pasé la rúbrica del profesor para que me pusiera nota a mis ejercicios.</p>

<p>La parte de las explicaciones es la que más me aporta. Ir viendo, preguntando y recibiendo correcciones hace que al final se vaya entendiendo todo. No te voy a decir que sea fácil, pero una vez que lo ves, va todo sobre ruedas.</p>

<h2 id="lo-que-evito-entregar-código-que-no-entiendo">Lo que evito: entregar código que no entiendo</h2>

<p>Ese fue el problema que tuve al principio. Copié código generado por la IA sin entenderlo en el módulo de Java y me di cuenta de que eso no sirve: no que la IA escriba mal, sino que te quedas con algo en las manos que no sabes explicar.</p>

<p>Desde entonces tengo una regla clara: <strong>solo entrego lo que sé defender</strong>. Ya escribí sobre <a href="https://codeandia.com/articulos/guias/aprender-java-con-ia-daw/">cómo uso la IA para estudiar Java sin volverte dependiente</a>, y ese es exactamente el enfoque que sigo ahora.</p>

<p>También evito el «a ver si funciona». Si algo no va, miro el error y pregunto por la causa, en vez de ir cambiando cosas hasta que por fin arranca. Esa regla es la que me ha sostenido en el examen de Java.</p>

<h2 id="bda-y-el-diagrama-er">BDA y el diagrama E/R</h2>

<p>En bases de datos estamos empezando con los diagramas entidad-relación y ya vamos dando los primeros pasos con el modelo relacional. Lo que más me ha costado han sido las cardinalidades: en el papel todo parece encajar hasta que el profesor te pregunta si es de uno a uno o de uno a muchos y te quedas mirando tu dibujo sin estar seguro.</p>

<p>Empezamos haciendo los diagramas a mano, y después ya pasamos al ordenador. Lo que más me ha servido no ha sido la herramienta, sino haber empezado a mano: te obliga a pensar la estructura antes de dibujarla bonita.</p>

<h2 id="utest-mis-dos-primeros-test-cases-aprobados">utest: mis dos primeros test cases aprobados</h2>

<p>Por otro lado, en utest me han llegado algunas encuestas para ver si encajo con algún test cycle, y poco más. Pero lo importante: ya me han aprobado mis dos primeros test cases. Me hace mucha ilusión, y espero que en el futuro vaya recibiendo más.</p>

<h2 id="lo-que-haría-diferente">Lo que haría diferente</h2>

<p>Si pudiera volver atrás, empezaría a estudiar antes. Me puse tarde por pereza, y si hubiera empezado desde que arrancó el curso, todo habría sido mucho más fluido.</p>

<p>Pero el camino es el que es. La IA no me ha quitado el trabajo de entender Java, y para eso está bien: explica, corrige y da práctica. La parte de pensar sigue siendo mía, y es justo la que quiero quedarme.</p>

<p>Si te ha pasado algo similar con tus exámenes o quieres contarme cómo te preparas tú, puedes escribirme a ivan@codeandia.com.</p>
]]></content:encoded>
  </item>
  
  <item>
    <title>Mi web dejó de cargar en España por un bloqueo de LaLiga a Cloudflare</title>
    <description>El 17 de octubre codeandia.com dejó de cargar. No era mi servidor: un bloqueo de LaLiga a Cloudflare se llevó las IP compartidas donde vivía. Así lo detecté.</description>
    <link>https://codeandia.com/articulos/guias/bloqueo-laliga-a-cloudflare-y-como-afecto-a-este-blog/</link>
    <guid>https://codeandia.com/articulos/guias/bloqueo-laliga-a-cloudflare-y-como-afecto-a-este-blog/</guid>
    <pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate>
    <category>Guía</category>
    <dc:creator>Iván</dc:creator>
    <content:encoded><![CDATA[<p>El 17 de octubre sobre las 14:50 abrí codeandia.com y la página no cargaba. No era un error a mitad de carga ni una pantalla rara: el navegador se quedaba girando hasta que se rendía. Probé otras páginas y todo iba con normalidad, así que descarté al principio lo de mi conexión.</p>

<p>Al principio pensé que me habían baneado o algo y me agobié un momento. Pero no había hecho nada malo, así que en cuanto lo comprobé me puse directamente a investigar, con la ayuda de Claude, y ahí salió la causa: el problema no era mío. Ese día había partido, y mi web había quedado atrapada en un bloqueo que no iba dirigido a mí.</p>

<h2 id="qué-había-pasado-el-día-anterior">Qué había pasado el día anterior</h2>

<p>El 16 de octubre había puesto codeandia.com detrás del proxy de Cloudflare. Lo hice por las redirecciones 301 de los artículos antiguos que había movido de sitio. Detrás del proxy, el tráfico de la web no va directo: pasa antes por las IP de Cloudflare, que son las mismas que usan miles de webs más.</p>

<h2 id="el-bloqueo">El bloqueo</h2>

<p>Según explica <a href="https://hayahora.futbol">hayahora.futbol</a>, desde una sentencia de diciembre de 2024 LaLiga y Telefónica Audiovisual Digital pueden comunicar a los operadores (Movistar, MásOrange, Vodafone y DIGI, entre otros) las direcciones IP que deben bloquear durante los partidos. El bloqueo recae sobre IP y no sobre dominios, y las IP de Cloudflare las comparten miles de webs. Mi web no era el objetivo, pero compartía IP con otras que sí lo eran. Según su historial, esas dos IP aparecían bloqueadas a partir de las 13:40 de ese día.</p>

<h2 id="cómo-lo-detecté">Cómo lo detecté</h2>

<p>Lo primero que hice fue descartar que el problema fuera mío:</p>

<ul>
  <li>Las páginas de estado de Cloudflare y de GitHub no decían nada: ninguna incidencia publicada.</li>
  <li>Con <code class="language-plaintext highlighter-rouge">nslookup</code>, el dominio apuntaba a las IP del proxy de Cloudflare, no a GitHub Pages:</li>
</ul>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ nslookup codeandia.com
Address: 188.114.96.5
Address: 188.114.97.5
</code></pre></div></div>

<ul>
  <li>Con <code class="language-plaintext highlighter-rouge">curl</code> no recibía respuesta.</li>
  <li>En cambio, <code class="language-plaintext highlighter-rouge">www.codeandia.com</code> respondía (con una redirección 301 al dominio raíz, servida por GitHub), así que GitHub Pages estaba funcionando. Lo que no funcionaba era el camino que pasaba por el proxy.</li>
</ul>

<p>Para no quedarme con la duda entré en hayahora.futbol. Aparecía que sí que había fútbol ese día, y con el buscador de webs que tienen busqué codeandia.com: estaba bloqueada. Además, su comprobador marcaba <strong>2 de 2 IPs bloqueadas en Movistar, Vodafone, MásMóvil y DIGI</strong>. Ahí tenía la confirmación.</p>

<h2 id="el-arreglo">El arreglo</h2>

<p>Pasé los cuatro registros A del dominio raíz (los que apuntan a GitHub Pages, como explico en <a href="https://codeandia.com/articulos/guias/que-dominio-comprar-primer-proyecto-web/">qué dominio comprar para tu primer proyecto web</a>) a <strong>DNS only</strong>. Con el proxy apagado, el tráfico va directo del navegador a GitHub Pages y no toca las IP bloqueadas. Después del cambio, el mismo <code class="language-plaintext highlighter-rouge">nslookup</code> devolvía las IP de GitHub Pages:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ nslookup codeandia.com
Address: 185.199.108.153
Address: 185.199.109.153
Address: 185.199.110.153
Address: 185.199.111.153
</code></pre></div></div>

<p>Y <code class="language-plaintext highlighter-rouge">curl -vI</code> respondió con <code class="language-plaintext highlighter-rouge">HTTP/1.1 200 OK</code>. La web volvió a cargar.</p>

<h2 id="qué-quedó-por-detrás">Qué quedó por detrás</h2>

<p>El arreglo no es permanente: los bloqueos son dinámicos y el proxy seguía siendo una opción con ese riesgo encima. Además, al apagar el proxy perdí las redirecciones 301 que tenía montadas en Cloudflare; ahora las cubren unas páginas stub que deja el propio blog, que cumplen, aunque no son un 301 de verdad.</p>

<h2 id="lo-aprendido">Lo aprendido</h2>

<ul>
  <li>Si una web no carga y el resto de internet va bien, hay dónde mirar: en hayahora.futbol puedes comprobar si hay un bloqueo de este tipo y si afecta a tu dominio.</li>
  <li>Cuando toque depurar conexiones, <code class="language-plaintext highlighter-rouge">curl -v</code> y no <code class="language-plaintext highlighter-rouge">curl -s</code>: sin la «v» no ves lo que pasa de verdad en la conexión.</li>
  <li>El proxy de Cloudflare es una dependencia con riesgo si tu audiencia, como la mía, está en España: compartes IP con miles de webs, y si a una de ellas le cae un bloqueo, te puedes ir con ella.</li>
</ul>
]]></content:encoded>
  </item>
  
  <item>
    <title>Qué portátil necesitas para estudiar programación: mi i3 con 8 GB</title>
    <description>El portátil con el que curso programación: un Lenovo IdeaPad 3 15ITL6 con i3 y 8 GB, cómo se comporta y qué buscaría si tuviera que cambiarlo.</description>
    <link>https://codeandia.com/articulos/guias/que-portatil-comprar-estudiar-daw-2026/</link>
    <guid>https://codeandia.com/articulos/guias/que-portatil-comprar-estudiar-daw-2026/</guid>
    <pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
    <category>Guía</category>
    <dc:creator>Iván</dc:creator>
    <content:encoded><![CDATA[## El portátil con el que curso DAW

Estoy en **primero de DAW** (el ciclo de FP de desarrollo de aplicaciones web en España) y este es el portátil con el que lo estoy sacando: un **Lenovo IdeaPad 3 15ITL6**, modelo 82H8, con **Intel Core i3-1115G4** (2 núcleos y 4 hilos, undécima generación), **8 GB de RAM**, un **SSD NVMe Samsung de 256 GB** y **Windows 11 Home**. Me lo regalaron por Navidad de 2023, así que ya llevo con él casi tres años y sigue todo de serie: ni la RAM ni el disco los he tocado.

Es una máquina de gama baja. No pretendo venderla como lo ideal para DAW; lo que sí puedo contar es lo que aguanta de verdad mientras estudio.

![Información del sistema del Lenovo IdeaPad 3 15ITL6](/assets/img/portatil-msinfo32.png){: width="1786" height="945"}

![Foto del Lenovo IdeaPad 3 15ITL6](/assets/img/portatil-ideapad-3-15itl6.jpg){: width="400" height="400"}

## Cómo se comporta en el día a día

La uso sobre todo para las dos cosas de siempre: en clase programo Java con **Eclipse** (cómo lo estudio lo cuento en [cómo aprendo Java con IA](/articulos/guias/aprender-java-con-ia-daw/)), y en casa la dejo abierta con Eclipse y el navegador echando un ojo a la documentación. Con eso no se queda corta, y la sensación general es que va bien y no me da muchos problemas.

Cuando la carga sube, la memoria llega a su límite y el equipo lo nota, aunque hasta ahora he podido seguir trabajando sin quedarme tirado a mitad de nada. El SSD NVMe de 256 GB (239 GB útiles) no me queda corto para el día a día. La pantalla, de 1920×1080 a 60 Hz, da para repartir editor y navegador lado a lado.

El punto más flojo es, sin duda, la **batería**. Según el informe de Windows pasó de 38.000 mWh de diseño a unos 33.890 mWh de carga completa, con 485 ciclos, lo que deja el acumulador en torno al **89 %** de su capacidad original. Se nota en el uso diario: me dura bastante poco, así que cuando puedo trabajar enchufado, mejor.

![Rendimiento y consumo en el Administrador de tareas](/assets/img/portatil-rendimiento.png){: width="1611" height="932"}

*El Administrador de tareas con VS Code y Chrome abiertos (bastantes pestañas y procesos de VS Code en marcha): la RAM marcaba el 86 %.*

![Información del disco y la SSD](/assets/img/portatil-disco.png){: width="1607" height="932"}

## Qué buscaría si tuviera que cambiarlo

*(Aviso: es criterio general. No he probado otros modelos.)*

- **RAM**: con 8 GB me llega para lo que hago en primero, pero va justo cuando la carga sube. Si cambiara, buscaría **16 GB**.
- **SSD**: el mío es un NVMe de 256 GB y no me quedo corto para el día a día; no bajaría de ahí.
- **Teclado**: comprobaría que la distribución sea **QWERTY español** antes de comprar.
- **Batería**: me fijaría en la duración real de uso, no solo en la ficha técnica.

## Veredicto

Con esta configuración de fábrica he podido seguir el ritmo de primero de DAW sin tropiezos serios. Si tuviera que cambiar el portátil ahora, lo primero que miraría sería la RAM, para pasar a 16 GB; después, la batería. El resto son mejoras de comodidad, no de necesidad.
]]></content:encoded>
  </item>
  
  <item>
    <title>Qué dominio comprar para tu primer proyecto web: .com vs .es</title>
    <description>Qué elegir para tu primer proyecto web: .com o .es, cuánto pagué por el mío y cómo apunté el DNS a GitHub Pages.</description>
    <link>https://codeandia.com/articulos/guias/que-dominio-comprar-primer-proyecto-web/</link>
    <guid>https://codeandia.com/articulos/guias/que-dominio-comprar-primer-proyecto-web/</guid>
    <pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
    <category>Guía</category>
    <dc:creator>Iván</dc:creator>
    <content:encoded><![CDATA[Cuando tienes un proyecto de clase o personal y quieres publicarlo con dominio propio, la pregunta llega rápido: ¿`.com` o `.es`? Parece una tontería, pero es la primera decisión que toma alguien que está empezando y la que más dudas deja.

## La diferencia real entre las dos

El `.com` es el que todo el mundo reconoce. Si alguien va a buscar tu proyecto o va a escribirlo de memoria, va a pensar en `.com` antes que en nada, y funciona igual de bien si algún día el proyecto quiere salir de España.

El `.es`, por su parte, deja clarísimo que el proyecto es español y encaja bien con cosas locales: un trabajo de clase con alcance nacional, una web de tu pueblo, una comunidad en español.

Como consejo general, y no como experiencia: **primero comprueba la disponibilidad y después enamórate del nombre**. Muchas veces el nombre que tenías en la cabeza ya está cogido, y entonces compensa ajustar el nombre antes que complicarlo con guiones o números que luego cuesta explicar.

## Lo que hice yo

El dominio de este blog es **codeandia.com** y lo compré el **8 de septiembre de 2026** en **Namecheap**, por **6,99 $ el primer año**. Elegí `.com` porque me parece el más conocido y el más útil a nivel mundial, y porque el nombre que quería estaba libre.

Lo que más me costó no fue el registro, sino entender qué va detrás. Un dominio solo te da el nombre; para que la web funcione tienes que decirle a internet a dónde apunta, y eso se hace con los registros DNS.

## Cómo apunté el DNS

El blog está alojado en **GitHub Pages**, que te da una dirección de su tipo `usuario.github.io`. Lo que hice fue dejar el dominio en Namecheap y apuntar los DNS a **Cloudflare**, que es quien resuelve el dominio y lo lleva hasta GitHub.

En la zona DNS de `codeandia.com` tengo, para el dominio raíz, cuatro registros **A** con destino a las IPs de GitHub Pages, todos en modo **DNS only**:

```
codeandia.com      A    185.199.108.153    DNS only
codeandia.com      A    185.199.109.153    DNS only
codeandia.com      A    185.199.110.153    DNS only
codeandia.com      A    185.199.111.153    DNS only
```

Y para la versión con `www`, un registro **CNAME** que apunta al hosting:

```
www.codeandia.com  CNAME  vibodigitalinfo-lab.github.io    DNS only
```

(Ese `TU-USUARIO` es el nombre de usuario de GitHub con el que tienes la cuenta.)

El resto de registros que hay en la zona (correo, newsletter) los gestiona cada servicio que los necesita; para que la web cargue, con los de arriba basta.

El modo **DNS only** es el que usan los cuatro registros del dominio raíz, y conviene fijarse en él: el proxy de Cloudflare se puede activar o desactivar por registro, y ese interruptor tiene consecuencias. Lo cuento en [este otro artículo sobre el día en que la web dejó de cargar](/articulos/guias/bloqueo-laliga-a-cloudflare-y-como-afecto-a-este-blog/).

## En corto

Si tu proyecto es más bien internacional o quieres que suene serio, `.com`. Si es claramente español y el nombre está libre, `.es`. En cualquier caso, comprueba la disponibilidad antes de decidirte y, cuando lo tengas, dedica el rato a entender los registros DNS: no es difícil, pero si los tocas a ojo se te puede caer algo sin que sepas por qué.
]]></content:encoded>
  </item>
  
  <item>
    <title>Cómo aprendo Java con IA sin volverme dependiente</title>
    <description>Cómo uso la IA para estudiar Java: los ejercicios de clase, las correcciones y por qué no entrego código que no entiendo.</description>
    <link>https://codeandia.com/articulos/guias/aprender-java-con-ia-daw/</link>
    <guid>https://codeandia.com/articulos/guias/aprender-java-con-ia-daw/</guid>
    <pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
    <category>Guía</category>
    <dc:creator>Iván</dc:creator>
    <content:encoded><![CDATA[<p>Java es el primer mazazo de primero de DAW, el ciclo de FP de desarrollo de aplicaciones web en España. Encima llevas una IA que te puede escribir la clase entera en dos segundos, y la tentación de copiarla tal cual es enorme.</p>

<p>Yo ya he caído en eso. Copié código generado por la IA sin entenderlo en el módulo de Java y me di cuenta. Ese es exactamente el problema: no que la IA escriba mal, sino que tú te quedes con algo en las manos que no sabes explicar.</p>

<p>Eso fue lo que me hizo cambiar el enfoque. Desde entonces tengo una regla clara: <strong>solo entrego lo que sé defender</strong>.</p>

<h2 id="cómo-lo-estudio-en-casa">Cómo lo estudio en casa</h2>

<p>En clase no siempre sale todo claro. A veces da pereza, las clases son largas y es fácil distraerse, así que muchas veces prefiero dejarlo para casa y atacarlo allí con calma.</p>

<p>Lo que hago es pasarle a Claude los ejercicios que hemos hecho en clase, contarle cómo los hace el profesor y cómo quiere que los hagamos nosotros, y a partir de ahí pedirle más ejercicios (algunos los he recopilado en <a href="https://codeandia.com/articulos/guias/ejercicios-java-basicos-daw/">ejercicios de Java para principiantes con soluciones</a>), correcciones y explicaciones. En la práctica es como tener un profesor de programación cuando te pones: le explico cómo trabaja el mío en clase y me prepara ejercicios al mismo estilo, ajustados a lo que estoy viendo.</p>

<p>La parte de las explicaciones es la que más me aporta. Ir viendo, preguntando y recibiendo correcciones hace que al final se vaya entendiendo todo. No te voy a decir que sea fácil, pero una vez que lo ves, va todo sobre ruedas.</p>

<h2 id="qué-uso-y-para-qué">Qué uso y para qué</h2>

<ul>
  <li><strong>Eclipse</strong>: es el IDE con el que doy Java en clase, y es donde me lo encuentro cada día.</li>
  <li><strong>Claude, a diario</strong>: para pasarle errores, enunciados y dudas.</li>
  <li><strong>ChatGPT</strong>, con el plan gratuito: para crear imágenes, y de vez en cuando como respaldo cuando falla Gemini, pero rara vez.</li>
  <li><strong>Cursor</strong>, solo con el plan gratuito. De pago no tengo nada.</li>
</ul>

<h2 id="qué-evito">Qué evito</h2>

<p>No entrego código que no entiendo. Antes de dar una solución por buena la hago mía: la leo, la explico y, si hace falta, la rehago a mano para comprobar que de verdad la tengo. Cómo lo aplico cuando llegan los exámenes lo cuento en <a href="https://codeandia.com/articulos/guias/estudiar-daw-con-ia-sin-copiar-codigo/">cómo estudio para exámenes de programación con IA</a>.</p>

<p>También evito el «a ver si funciona». Si algo no va, miro el error y pregunto por la causa, en vez de ir cambiando cosas hasta que por fin arranca.</p>

<h2 id="en-corto">En corto</h2>

<p>La IA no me ha quitado el trabajo de entender Java, y para eso está bien: explica, corrige y da práctica. La parte de pensar sigue siendo mía, y es justo la que quiero quedarme.</p>
]]></content:encoded>
  </item>
  
</channel>
</rss>