webForumDet fria alternativet

Hjälp med for-loop

Javaur Java

11 svar · 517 visningar · startad av Vinnaren

Medlem sedan sep. 2005833 inlägg
Frågan#1

Hej

Jag behöver hjälp med en for loop. Har följande kod:

for(int i=2007; i<2009; i++)
{
       out.print("<option value='"+i+"'>"+i+"</option>");
}

Jag har en dropdown lista som jag vill fylla med årtal. Antalet årtal som ska finnas i dropdown listan ska vara max 2. Det första årtalet som ska finnas i dropdown listan ska vara det nuvarande året (nu alltså 2007). Andra året som ska finnas i dropdown listan är året efter det nuvarande året (alltså 2008, nästa år). I stället för att skriva som jag har gjort ovan i koden vill jag att 2007 ska vara det aktuella året som automatiskt ska skrivas ut med någon datumfunktion i java.

Frågan är då, hur löser jag detta på bästa/enklaste sätt??

Tacksam för all hjälp :bire :stud

Medlem sedan jan. 20023 327 inlägg
#2

Din beskrivning av problemet är ganska otydlig, läs gärna igenom den och förtydliga så ska jag nog kunna hjälpa dig. Varför använder du html-taggar i din for-loop?

Medlem sedan sep. 2005833 inlägg
#3

uppdaterad fråga :bire Hoppas det vart bättre :q

Medlem sedan jan. 20023 327 inlägg
#4

Jo lite bättre, men jag förstår fortfarande inte varför du använder dig av HTML-taggar när det är Java det gäller?

Importera först paketet:

import java.util.Calendar;

Sedan borde följande göra susen:

Calendar cal = new GregorianCalendar();

for (int year = cal.get(Calendar.YEAR); year < year + 2; year++) {
    out.print("<option value='"+year+"'>"+year+"</option>");
}

Hoppas det hjälpte :)

Medlem sedan sep. 2005833 inlägg
#5

haha, det var inte flera miljoner år jag ville ha, utan enbart 2 i listan x(
Så den funkade inte redigt.

Medlem sedan jan. 20023 327 inlägg
#6

Opps sorry, följande är testad och fungerar!

Calendar cal = new GregorianCalendar();

for (int year = cal.get(Calendar.YEAR), yearLimit = year + 1; year <= yearLimit; year++) {
    System.out.print("<option value='"+year+"'>"+year+"</option>");
}

Eller så här:

Calendar cal = new GregorianCalendar();
int year = cal.get(Calendar.YEAR); 
		
for (int yearLimit = year + 1; year <= yearLimit; year++) {
    System.out.print("<option value='"+year+"'>"+year+"</option>");
}

Ytterligare ett alternativ (förmodligen snyggaste sättet) ;)

Calendar cal = new GregorianCalendar();
int yearLimit = cal.get(Calendar.YEAR) + 1; 
				
for (int year = cal.get(Calendar.YEAR); year <= yearLimit; year++) {
    System.out.print("<option value='"+year+"'>"+year+"</option>");
}
Medlem sedan sep. 2005833 inlägg
#7

Tack Compusa, nu funkar det :birp

Kan man göra på något sätt att aktuellt år markeras i list rutan??

Medlem sedan jan. 20023 327 inlägg
#8

Busenkelt :)
Gjorde om loopen lite...

Calendar cal = new GregorianCalendar();
int currentYear = cal.get(Calendar.YEAR); 
				
for (int year = currentYear, yearLimit = currentYear + 1; year <= yearLimit; year++) {
    if (year == currentYear)
        System.out.print("<option value='"+year+"' selected>"+year+"</option>");
    else
        System.out.print("<option value='"+year+"'>"+year+"</option>");
}

Är det Java Server Pages du håller på med? :q

Medlem sedan sep. 2005833 inlägg
#9

Tack, nu funkar den som jag vill :bire

Det är både jsp och java -classer :P

Medlem sedan jan. 20023 327 inlägg
#10

Bra bra, då förstår jag bättre varför du spottar ut html-taggar.

Medlem sedan sep. 2001961 inlägg
#11

Det snyggaste sättet är att använda sig av JavaServer Pages Standard Tag Library (JSTL). Då måste du använda dig av JSTL-biblioteket Core (c) .

Jakarta har en riktigt bra implementation av JSTL som du kan ladda ner från http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html.

Det blir att se ut något såhär:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="java.util.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%java.util.Calendar calendar = java.util.GregorianCalendar
					.getInstance();
			java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(
					"yyyy");
%>

<c:set var="now" value="<%=sdf.format(calendar.getTime())%>" />

<%calendar.add(Calendar.YEAR, 10);%>

<c:set var="future" value="<%=sdf.format(calendar.getTime())%>" />
<select name="year">
	<c:forEach begin="${now}" end="${future}" var="year">
		<option><c:out value="${year}" /></option>
	</c:forEach>
</select>
</body>
</html>

TagLibs är lite knepiga att sätta sig in i men när du gjort det så blir det oerhört mycket renare kod... och så finns det jäkligt mycket som är gjort redan.

Medlem sedan sep. 2005833 inlägg
#12

tack, ska prova det med :e

129 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)