2015-09-09, 18:37
  #6313
Medlem
ToiletRelicTrees avatar
Citat:
Ursprungligen postat av sampanl
Jag skrev en liten klass som du kan testa. Men det här är en liten dynamiskt array klass och inte en "kö", det är skillnad. En kö har en head och en tail och man kan t.ex lägga till värden med en funktion som kallas "push()" och ta bort värden med "pop()". Kolla LIFO och FIFO-stackar på wiki.

Jag har inte testat om klassen funkar bra, då den skrevs snabbt. Och som du ser har jag inte implementerat en funktion för att ta bort värden.
Det känns som du krånglar till det lite extra, men det fungerar uppenbarligen. Har jag rätt när jag gissar att du kommer från C/C++?

Det kan vara värt att tillägga för alla nybörjare där ute att i Java så skriver man metodnamn och funktioner på formen getElementAt respektive newArr. Sen är _ på privata variabler en smaksak, men jag tycker det gör koden fulare, och således mer svårläst, helt i onödan. Vill man visa att det är den klassens variabel du använder, så görs det med fördel med this.
Citera
2015-09-09, 19:34
  #6314
Medlem
Citat:
Ursprungligen postat av ToiletRelicTree
Det känns som du krånglar till det lite extra, men det fungerar uppenbarligen. Har jag rätt när jag gissar att du kommer från C/C++?

Det kan vara värt att tillägga för alla nybörjare där ute att i Java så skriver man metodnamn och funktioner på formen getElementAt respektive newArr. Sen är _ på privata variabler en smaksak, men jag tycker det gör koden fulare, och således mer svårläst, helt i onödan. Vill man visa att det är den klassens variabel du använder, så görs det med fördel med this.

Hej jag kommer från c++ Java är ett jäkla härke, jävla skit alltså
Citera
2015-09-09, 23:31
  #6315
Medlem
Citat:
Ursprungligen postat av ToiletRelicTree
Det känns som du krånglar till det lite extra, men det fungerar uppenbarligen. Har jag rätt när jag gissar att du kommer från C/C++?

Det kan vara värt att tillägga för alla nybörjare där ute att i Java så skriver man metodnamn och funktioner på formen getElementAt respektive newArr. Sen är _ på privata variabler en smaksak, men jag tycker det gör koden fulare, och således mer svårläst, helt i onödan. Vill man visa att det är den klassens variabel du använder, så görs det med fördel med this.

Tänkte utöka klassen med lite generics, precis läst lite på området. Finns det lite (eller mycket) förbättringar att göra till denna lilla array klass?

Kod:
public class DynamicArray<E> {
    private 
int size;
    private 
int pointer;
    private final 
int RESIZE_VAL 5;
    private 
E arr[];

    @
SuppressWarnings("unchecked")
    public 
DynamicArray(int size) {
        
super();
        
this.size = (size 0) ? size;
        
arr = (E[]) new Object[this.size];
        
pointer 0;
    }

    public 
void add(E add) {
        if (
pointer == size)
            
resize();
        
arr[pointer] = add;
        
pointer++;
    }

    @
SuppressWarnings("unchecked")
    public 
void remove(int idx) {
        if((
idx+1)==size)
            
arr[idx] = null;
        
        
E tmpArr[] = (E[]) new Object[pointer-(idx+1)];
        
        
int copySize pointer - (idx+1);
        
System.arraycopy(arridx+1tmpArr0copySize);
        
System.arraycopy(tmpArr0arridxcopySize);
    
        --
pointer;    
    }

    public 
E get(int idx) {
        if(
idx || idx pointer)
            return 
null;
        return 
arr[idx];
    }

    public 
int capacity() {
        return 
size;
    }

    public 
int length() {
        return 
pointer;
    }

    private 
void resize() {
        
size += RESIZE_VAL;
        @
SuppressWarnings("unchecked")
        
E newArr[] = (E[]) new Object[size];
        
System.arraycopy(arr0newArr0size RESIZE_VAL);
        
arr newArr;
    }


Kod:
public class DynamicArrayTest {

    public static 
void main(String[] args) {
        
        
DynamicArray<Stringarr = new DynamicArray<String>(0);
        
        
arr.add("Bicycle"); // 0
        
arr.add("Car"); // 1
        
arr.add("Bear"); // 2
        
arr.add("Tomato"); // 3
        
arr.add("Book"); // 4
        
arr.add("Airplane"); // 5

        
for(int i 0arr.length();i++)
            
System.out.println(arr.get(i));
        
        
arr.remove(2);

        
System.out.println();

        for(
int i 0arr.length();i++)
            
System.out.println(arr.get(i));
        
        
System.out.println("Capacity: " arr.capacity());
        
System.out.println("Length: " arr.length());
    }


Den verkar funka för nu iaf.

Output:

Bicycle
Car
Bear
Tomato
Book
Airplane

Bicycle
Car
Tomato
Book
Airplane
Capacity: 10
Length: 5
__________________
Senast redigerad av sampanl 2015-09-09 kl. 23:33.
Citera
2015-09-16, 20:32
  #6316
Medlem
Hej.

Har ett litet problem.

Detta är vad jag skall göra: http://imgur.com/a/VovZD

Men jag har kört fast rejält när det kommer till hur jag skall få fram mitt random nummer och sedan även hur jag skall göra för att få en sak om man skriver en string som går att dela med två eller inte.

Här är min kod än så länge:
Kod:
import java.util.Random;
import java.util.Scanner;

public class 
Lab3
{
    public static 
void main (String[] args)
    {
        
Random rand = new Random();
        
Scanner scan = new Scanner(System.in);

        
String stringName;
        
double principal;
        
double time;
        
double si;
        
int interestRate;
        
int len;
        
int num;

        
num=rand.nextInt(5);
        
        if (
num >= 5)
        {
            
System.out.print("15");
        {
        else if (
num >=3)
        {
            
System.out.print("10");
        }
        else
        {
            
System.out.print("5");
        }

        
System.out.print("Enter the amount: ");
        
principal scan.nextDouble();

        
System.out.print("Enter the time: ");
        
time scan.nextDouble();

        
System.out.print("Enter the string: ");
        
stringName scan.next();

        
si = (principal time num)/100;

        
System.out.print("Your interest rate is ");
        
System.out.print(num);
        
System.out.print(" and Simple Interest is ");
        
System.out.println(si);






    }

Jag har fått felmeddelande på mitt else if statement (num < 5 >=3) men vet inte hur jag skall göra.
__________________
Senast redigerad av Proton 2015-09-16 kl. 20:58.
Citera
2015-09-16, 20:48
  #6317
Medlem
preben12s avatar
Citat:
Ursprungligen postat av Rexona4Men
Hej.

Har ett litet problem.

Detta är vad jag skall göra: http://imgur.com/a/VovZD

Men jag har kört fast rejält när det kommer till hur jag skall få fram mitt random nummer och sedan även hur jag skall göra för att få en sak om man skriver en string som går att dela med två eller inte.

Här är min kod än så länge:

}

Jag har fått felmeddelande på mitt else if statement (num < 5 >=3) men vet inte hur jag skall göra.

Vad försöker du ens säga här?

Kod:
if(num < 5 >=3)

För att kolla om en String's längd är delbar med två (dvs jämn) så använd modulo-räkning.

Kod:
len=stringName.length()

ger dig längden på strängen du läser in.

Om ett tal är jämnt delbart med två så är det jämnt, annars udda.

Modulo-operatorn % ger dig resten vid heltalsdivision.

Så exempelvis 7%3=1 eftersom 7/3 ger resten 1.

Så det du vill kolla är om len%2==0. (dvs om len delat med två ger resten noll)

Kod:
if(len%2 ==0)
{
//jämnt
}
else
{
//udda
}
Citera
2015-09-16, 21:06
  #6318
Medlem
Citat:
Ursprungligen postat av preben12
Vad försöker du ens säga här?

Kod:
if(num < 5 >=3)

För att kolla om en String's längd är delbar med två (dvs jämn) så använd modulo-räkning.

Kod:
len=stringName.length()

ger dig längden på strängen du läser in.

Om ett tal är jämnt delbart med två så är det jämnt, annars udda.

Modulo-operatorn % ger dig resten vid heltalsdivision.

Så exempelvis 7%3=1 eftersom 7/3 ger resten 1.

Så det du vill kolla är om len%2==0. (dvs om len delat med två ger resten noll)

Kod:
if(len%2 ==0)
{
//jämnt
}
else
{
//udda
}

Jag har svårt att förklara det på ett bra sätt eftersom att jag måste översätta det ifrån engelska, men dom två bilderna visar uppgiften jag skall göra.

Saken är den att att jag skall få fram en random int med hjälp utav "num = rand.nextInt(5);" och den skall styra vilket värde jag får som "interest rate", om mitt random nummer är större eller lika med 5 så skall interest rate bli 15, om det är större eller lika med än 3 men mindre än 5 så skall det bli 10 och om det är mindre än 3 skall det bli 5.

Saken är den att det är bara interest rate som skall visas i programmet så jag har ingen koll på hur jag skall få fram random numret som styr vilket värde jag får på intrest rate utan att visa det i programmet.

Det är i alla fall steg 4 och 5 på bilderna jag laddat upp i min första kommentar. Sen är sample output i slutet exempel på hur det skall se ut.
__________________
Senast redigerad av Rexona4Men 2015-09-16 kl. 21:08.
Citera
2015-09-16, 21:38
  #6319
Medlem
preben12s avatar
Citat:
Ursprungligen postat av Rexona4Men
Jag har svårt att förklara det på ett bra sätt eftersom att jag måste översätta det ifrån engelska, men dom två bilderna visar uppgiften jag skall göra.

Saken är den att att jag skall få fram en random int med hjälp utav "num = rand.nextInt(5);" och den skall styra vilket värde jag får som "interest rate", om mitt random nummer är större eller lika med 5 så skall interest rate bli 15, om det är större eller lika med än 3 men mindre än 5 så skall det bli 10 och om det är mindre än 3 skall det bli 5.

Saken är den att det är bara interest rate som skall visas i programmet så jag har ingen koll på hur jag skall få fram random numret som styr vilket värde jag får på intrest rate utan att visa det i programmet.

Det är i alla fall steg 4 och 5 på bilderna jag laddat upp i min första kommentar. Sen är sample output i slutet exempel på hur det skall se ut.

Så här ser semantiken ut då. Kolla speciellt hur else if-villkoret ser ut.

Kod:
if (num >5)
{
//sätt interest till 15
}
else if (num<5 || num>=3)
{
//sätt interest till 10
}
else
{
sätt interest till 5
}
__________________
Senast redigerad av preben12 2015-09-16 kl. 22:25.
Citera
2015-09-16, 22:24
  #6320
Medlem
Citat:
Ursprungligen postat av preben12
Så här ser semantiken ut då. Kolla speciellt hur else if-villkoret ser ut.

Kod:
if (num >5)
{
//sätt interest till 15
}
else if (num<5 && num>=3)
{
//sätt interest till 10
}
else
{
sätt interest till 5
}

Tack så mycket för hjälpen!

Nu har jag bara en sak kvar och det är att få till samspelet mellan mitt random nummer och interestRate.

När jag nu kör programmet och matar in informationen som är i fet stil blir det enligt följande:

Enter the amount: 273
Enter the time: 7
Enter the string: Hej
10Your interest rate is 10 and Simple Interest is 191.1
You have entered odd length string

och det skall se ut enligt följande:

Enter the amount: 800
Enter the time: 2
Enter your name: Today is Sunday
The Interest Rate is 15.0 and Simple Interest is 240.0
You have entered odd length string

på något vänster skriver den ut 10 av sig själv och antar att det är interest raten, min kod ser nu ut enligt följande:

Kod:
import java.util.Random;
import java.util.Scanner;

public class Lab3
{
	public static void main (String[] args)
	{
		Random rand = new Random();
		Scanner scan = new Scanner(System.in);

		String stringName;
		double principal;
		double time;
		double si;
		int interestRate;
		int len;
		int num;



		System.out.print("Enter the amount: ");
		principal = scan.nextDouble();

		System.out.print("Enter the time: ");
		time = scan.nextDouble();

		System.out.print("Enter the string: ");
		stringName = scan.next();

		num=rand.nextInt(5);

		if (num>5)
		{
			System.out.print(interestRate=15);
		}
			else if (num<5 && num>=3)
		{
			System.out.print(interestRate=10);
		}
			else
		{
			System.out.print(interestRate=5);
		}

		si = (principal * time * interestRate)/100;

		System.out.print("Your interest rate is ");
		System.out.print(interestRate);
		System.out.print(" and Simple Interest is ");
		System.out.println(si);

		len = stringName.length();

		if(len%2 ==0)
		{
			System.out.println("You have entered even length string");
		}
		else
		{
			System.out.println("You have entered odd length string");
		}

	}
}

Förlåt om jag är dålig på att fatta men är som sagt nybörjare :<
Citera
2015-09-16, 22:30
  #6321
Medlem
Citat:
Ursprungligen postat av Rexona4Men
Tack så mycket för hjälpen!

Nu har jag bara en sak kvar och det är att få till samspelet mellan mitt random nummer och interestRate.

När jag nu kör programmet och matar in informationen som är i fet stil blir det enligt följande:

Enter the amount: 273
Enter the time: 7
Enter the string: Hej
10Your interest rate is 10 and Simple Interest is 191.1
You have entered odd length string

och det skall se ut enligt följande:

Enter the amount: 800
Enter the time: 2
Enter your name: Today is Sunday
The Interest Rate is 15.0 and Simple Interest is 240.0
You have entered odd length string

på något vänster skriver den ut 10 av sig själv och antar att det är interest raten, min kod ser nu ut enligt följande:

Kod:
import java.util.Random;
import java.util.Scanner;

public class Lab3
{
	public static void main (String[] args)
	{
		Random rand = new Random();
		Scanner scan = new Scanner(System.in);

		String stringName;
		double principal;
		double time;
		double si;
		int interestRate;
		int len;
		int num;



		System.out.print("Enter the amount: ");
		principal = scan.nextDouble();

		System.out.print("Enter the time: ");
		time = scan.nextDouble();

		System.out.print("Enter the string: ");
		stringName = scan.next();

		num=rand.nextInt(5);

		if (num>5)
		{
			System.out.print(interestRate=15);
		}
			else if (num<5 && num>=3)
		{
			System.out.print(interestRate=10);
		}
			else
		{
			System.out.print(interestRate=5);
		}

		si = (principal * time * interestRate)/100;

		System.out.print("Your interest rate is ");
		System.out.print(interestRate);
		System.out.print(" and Simple Interest is ");
		System.out.println(si);

		len = stringName.length();

		if(len%2 ==0)
		{
			System.out.println("You have entered even length string");
		}
		else
		{
			System.out.println("You have entered odd length string");
		}

	}
}

Förlåt om jag är dålig på att fatta men är som sagt nybörjare :<

Kod:
if (num>5)
{
    
System.out.print(interestRate 15);
}
else if (
num<&& num >= 3)
{
    
System.out.print(interestRate 10);
}
else
{
    
System.out.print(interestRate 5);


Om du får gissa, vad tror du att följande kod gör?
Citera
2015-09-16, 22:49
  #6322
Medlem
Citat:
Ursprungligen postat av newone
Kod:
if (num>5)
{
    
System.out.print(interestRate 15);
}
else if (
num<&& num >= 3)
{
    
System.out.print(interestRate 10);
}
else
{
    
System.out.print(interestRate 5);


Om du får gissa, vad tror du att följande kod gör?

Den sätter interestRate till 15, 10 eller 5 beroende på vilket värde mitt random nummer har.
Jag såg nu att jag inte hade tagit bort print vilket jag borde ha gjort.

Tog bort det och nu verkar det fungera som det skall.

Tack för hjälpen allihopa.
Citera
2015-09-19, 00:35
  #6323
Medlem
Hej, Jag undrar om det finns någon kod som gör att man kan se om en knapp är nedtryckt (t.ex. i mitt fall shift), utanför java fönster?

Det jag vill uppnå är alltså att kunna ha en if-sats till om shift är nedtryckt.

Mvh
Citera
2015-09-19, 10:27
  #6324
Moderator
Protons avatar
Citat:
Ursprungligen postat av launa
Hej, Jag undrar om det finns någon kod som gör att man kan se om en knapp är nedtryckt (t.ex. i mitt fall shift), utanför java fönster?

Det jag vill uppnå är alltså att kunna ha en if-sats till om shift är nedtryckt.

Mvh
Vad betyder "utanför java fönster"?

Du skulle ju kunna prova med en KeyListener?
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in