[quote=Marky.Vasconcelos]Um desafio, dado qualquer vetor de numeros inteiros, inverte-lo sem usar APIs especificas.
Bonus para quem fazer isso sem variaveis auxiliares.
(Se não me engano eu mesmo já escrevi um código desse aqui no fórum)[/quote]
Inverter o array em si sem usar uma variável auxiliar, não sei mesmo como. Porque se tentasse inverter os valores de um array usando duas variáveis como índices num for, (a segunda variável já não seria considerada auxiliar?) chegando na metade do array, ele já copiaria os dados novos na outra metade do array, se é que isto é possível.
Já para imprimir somente, fazendo um pouco diferente do leofaka:
[code]public class InverterArray {
public static void main (String[] args) {
int array[] = new int [50];
for (int indice = array.length - 1; indice > -1; indice--)
{
System.out.println(array[indice]);
}
}
}[/code]
O problema de se fazer uma comparação <= ou = a array.length ele não compila. Isso é uma coisa que estou curioso pra saber, como que se faz para obter o último índice do array (uma vez que vc não sabe o tamanho dele), já que com o array.length vc não consegue?
Claro que se tu colocar um System.out.println(array.length); depois do for, no código acima, ele vai retornar o tamanho do array. Me refiro à uma comparação booleana dentro de uma estrutura de seleção ou de repetição, por exemplo.
[code]
import java.util.*;
class Primo {
private BitSet bs;
int a = 15000;
public void findPrimes (int a) {
bs = new BitSet (n+1);
int sq = (int) Math.sqrt (n);
bs.set (0, n, true);
int x = 2;
while (x <= sq) {
for (int i = x + x; i <= n; i += x) {
bs.clear (i);
}
x = bs.nextSetBit (x + 1);
}
}
public boolean isPrime (int n) {
return bs.get (n);
}
public static void main(String[] args) {
long inicio = System.currentTimeMillis();
Primo s = new Primo();
s.findPrimes (775146822);
for (int i = 1; i <= 101; ++i) {
System.out.println (i + " is " + (s.isPrime(i) ? "prime" : "not prime"));
System.out.printf("Tempo gasto: %d ms%n", (System.currentTimeMillis() - inicio));
}
}
} [/code]
acho que funciona dadu um numero primo ache todos os primos atte não testei.
public class InverterArray
{
public static void main( String[] args )
{
int x;
x = Integer.parseInt( JOptionPane.showInputDialog( "Digite o índice do array em inteiros: " ) );
int[] array1 = new int[x],
array2 = new int[x];
// vai preencher até array1[ x - 1 ]
for ( int index = 0; index < array1.length; index++ )
{
array1[index] = index; //colocando números no array1
}
// vai decrescer o array1 ao mesmo tempo em que aumenta o índice do array2
for ( int index1 = array1.length - 1, index2 = 0; index1 > 0; index1--, index2++ )
{
array2[index2] = array1[index1]; /* índice 0 do array2 vai ter o valor
do último índice de array1 */
}
for ( int index = 0; index < array2.length; index++ )
{
// vai imprimir os valores invertidos do array1
System.out.println( array2[index] );
}
// info final
System.out.println( "O tamanho do array é de: " + array1.length );
}
}[/code]
Usando 2 vetores, cada um com seu índice. A variável x serve apenas para entrar com o tamanho do índice. Pode-se também retirar o JOptionPane e a variável x, se der algum valor manualmente para os dois vetores.
E eu já sei a resposta para minha pergunta mesmo, acima. Claro! O método length, diz o tamanho do array, que sempre vai ser array[índice - 1] porque ele sempre começa a contagem em 0 e não em 1. Logo o último índice do vetor sempre vai ser [color=blue]array.length - 1[/color].
Eu tinha me confundido aqui antes…
Ah e pra não dizer que minha teoria não estava correta, testei o código das linhas 23 a 27 usando somente um vetor, assim:
for ( int index1 = array1.length - 1, index2 = 0; index1 > 0; index1--, index2++ )
{
array1[index2] = array1[index1]; /* índice 0 do array1 vai receber o valor
do último índice de array1, porém o que acontece quando chegar na metade do array? */
}
E depois imprimindo este array… se o valor digitado pelo usuário for 50, ele vai de 49 até 26 e depois sobe novamente até 49. Neste caso usando duas variáveis como índice e somente um array/vetor.
Acho que resolveu… lance o próximo desafio evefuj[/quote]vc resolveu primeiro, resolveu com uma variável auxiliar, mas resolveu primeiro. Posta um desafio aí.
[quote=Marky.Vasconcelos]Um desafio, dado qualquer vetor de numeros inteiros, inverte-lo sem usar APIs especificas.
Bonus para quem fazer isso sem variaveis auxiliares.
(Se não me engano eu mesmo já escrevi um código desse aqui no fórum)[/quote]
Dá pra fazer usando recursão, aí não escrevemos um laço. Porém, em Java ainda seria necessário uma variável auxiliar para trocar a posição dos elementos do array.
Acho que resolveu… lance o próximo desafio evefuj[/quote]vc resolveu primeiro, resolveu com uma variável auxiliar, mas resolveu primeiro. Posta um desafio aí.[/quote]
Pow, sei lá… embora tenha sido primeiro, acho o desafio real era sem a var auxiliar…
Está em C, fiquei com preguiça de passar pro JAVA, sexta é foda:
/* rand example: guess the number */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
int iSecret, iGuess, cont = 1;
/* initialize random seed: */
srand ( time(NULL) );
/* generate secret number: */
iSecret = rand() % 10 + 1;
do {
printf ("Guess the number (1 to 10): ");
scanf ("%d",&iGuess);
if(cont == 3){
printf("Osso!\n");
system("pause");
return 0;
}
if (iSecret<iGuess) puts ("The secret number is lower");
else if (iSecret>iGuess) puts ("The secret number is higher");
cont ++;
} while (iSecret!=iGuess);
puts ("Congratulations!");
system("pause");
return 0;
}
Implemente um programa que sorteia um número de 1 a 10 e dá ao usuário 3
tentativas de acertá-lo. A cada tentativa errada, o programa informa se o número a adivinhar está abaixo ou acima
Desenvolvi esse codigo um tanto porco, no meu ver, mas foi em meu tempo record… entonce… ta ai.
package br.com.desafio;
/*
Implemente um programa que sorteia um número de 1 a 10 e dá ao usuário 3
tentativas de acertá-lo. A cada tentativa errada, o programa informa se o número a adivinhar está abaixo ou acima
*/
import java.util.Random;
import java.util.Scanner;
public class Sorteia {
int segredo;
Random ramdom = new Random();
public Sorteia() {
segredo = 1 + ramdom.nextInt(10);
}
public void adivinha() {
for (int i = 0; i < 3; i++) {
Scanner input = new Scanner(System.in);
System.out.println("\nAdvinhe Qual numero o progama gerou");
int firstTry = input.nextInt();
if (firstTry == segredo) {
System.out.println("Parabens, Voce Acertou");
break;
} else {
guessNumber(firstTry);
System.out.println("\nTente Novamente");
}
}
}
public void guessNumber(int x) {
if (x < segredo) {
System.out.println("O numero esta Acima");
} else if (x > segredo) {
System.out.println("O numero esta Abaixo");
}
}
getAdicted, já é o segundo tópico que você tenta “pegar carona” que eu vejo.
Por favor, trata o seu problema no seu tópico, e pare de criar links para ele no tópico dos outros!